Full Code of doctrine/orm for AI

3.6.x 27c33cf88dde cached
1645 files
6.3 MB
1.7M tokens
10195 symbols
1 requests
Download .txt
Showing preview only (6,911K chars total). Download the full file or copy to clipboard to get everything.
Repository: doctrine/orm
Branch: 3.6.x
Commit: 27c33cf88dde
Files: 1645
Total size: 6.3 MB

Directory structure:
gitextract_zhimkn3r/

├── .doctrine-project.json
├── .gitattributes
├── .github/
│   ├── PULL_REQUEST_TEMPLATE/
│   │   ├── Failing_Test.md
│   │   ├── Improvement.md
│   │   └── New_Feature.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── coding-standards.yml
│       ├── composer-lint.yml
│       ├── continuous-integration.yml
│       ├── documentation.yml
│       ├── phpbench.yml
│       ├── release-on-milestone-closed.yml
│       ├── stale.yml
│       ├── static-analysis.yml
│       └── website-schema.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── UPGRADE.md
├── ci/
│   └── github/
│       └── phpunit/
│           ├── mysqli.xml
│           ├── pdo_mysql.xml
│           ├── pdo_pgsql.xml
│           ├── pdo_sqlite.xml
│           ├── pgsql.xml
│           └── sqlite3.xml
├── composer.json
├── docs/
│   ├── .gitignore
│   ├── LICENSE.md
│   ├── README.md
│   ├── composer.json
│   └── en/
│       ├── cookbook/
│       │   ├── advanced-field-value-conversion-using-custom-mapping-types.rst
│       │   ├── aggregate-fields.rst
│       │   ├── custom-mapping-types.rst
│       │   ├── decorator-pattern.rst
│       │   ├── dql-custom-walkers/
│       │   │   └── InterpolateParametersSQLOutputWalker.php
│       │   ├── dql-custom-walkers.rst
│       │   ├── dql-user-defined-functions.rst
│       │   ├── entities-in-session.rst
│       │   ├── generated-columns/
│       │   │   ├── Article.php
│       │   │   └── Person.php
│       │   ├── generated-columns.rst
│       │   ├── implementing-arrayaccess-for-domain-objects.rst
│       │   ├── mysql-enums.rst
│       │   ├── resolve-target-entity-listener.rst
│       │   ├── sql-table-prefixes.rst
│       │   ├── strategy-cookbook-introduction.rst
│       │   ├── validation-of-entities.rst
│       │   └── working-with-datetime.rst
│       ├── index.rst
│       ├── reference/
│       │   ├── advanced-configuration.rst
│       │   ├── architecture.rst
│       │   ├── association-mapping.rst
│       │   ├── attributes-reference.rst
│       │   ├── basic-mapping/
│       │   │   ├── DefaultValues.php
│       │   │   └── default-values.xml
│       │   ├── basic-mapping.rst
│       │   ├── batch-processing.rst
│       │   ├── best-practices.rst
│       │   ├── caching.rst
│       │   ├── change-tracking-policies.rst
│       │   ├── configuration.rst
│       │   ├── dql-doctrine-query-language.rst
│       │   ├── events.rst
│       │   ├── faq.rst
│       │   ├── filters.rst
│       │   ├── improving-performance.rst
│       │   ├── inheritance-mapping.rst
│       │   ├── installation.rst
│       │   ├── limitations-and-known-issues.rst
│       │   ├── metadata-drivers.rst
│       │   ├── namingstrategy.rst
│       │   ├── native-sql.rst
│       │   ├── partial-hydration.rst
│       │   ├── partial-objects.rst
│       │   ├── php-mapping.rst
│       │   ├── query-builder.rst
│       │   ├── second-level-cache.rst
│       │   ├── security.rst
│       │   ├── tools.rst
│       │   ├── transactions-and-concurrency.rst
│       │   ├── typedfieldmapper.rst
│       │   ├── unitofwork-associations.rst
│       │   ├── unitofwork.rst
│       │   ├── working-with-associations.rst
│       │   ├── working-with-objects.rst
│       │   └── xml-mapping.rst
│       ├── sidebar.rst
│       └── tutorials/
│           ├── composite-primary-keys.rst
│           ├── embeddables.rst
│           ├── extra-lazy-associations.rst
│           ├── getting-started.rst
│           ├── ordered-associations.rst
│           ├── override-field-association-mappings-in-subclasses.rst
│           ├── pagination.rst
│           ├── working-with-indexed-associations/
│           │   ├── Market.php
│           │   └── market.xml
│           └── working-with-indexed-associations.rst
├── doctrine-mapping.xsd
├── phpbench.json
├── phpcs.xml.dist
├── phpstan-baseline.neon
├── phpstan-dbal3.neon
├── phpstan-params.neon
├── phpstan.neon
├── phpunit.xml.dist
├── src/
│   ├── AbstractQuery.php
│   ├── Cache/
│   │   ├── AssociationCacheEntry.php
│   │   ├── CacheConfiguration.php
│   │   ├── CacheEntry.php
│   │   ├── CacheException.php
│   │   ├── CacheFactory.php
│   │   ├── CacheKey.php
│   │   ├── CollectionCacheEntry.php
│   │   ├── CollectionCacheKey.php
│   │   ├── CollectionHydrator.php
│   │   ├── ConcurrentRegion.php
│   │   ├── DefaultCache.php
│   │   ├── DefaultCacheFactory.php
│   │   ├── DefaultCollectionHydrator.php
│   │   ├── DefaultEntityHydrator.php
│   │   ├── DefaultQueryCache.php
│   │   ├── EntityCacheEntry.php
│   │   ├── EntityCacheKey.php
│   │   ├── EntityHydrator.php
│   │   ├── Exception/
│   │   │   ├── CacheException.php
│   │   │   ├── CannotUpdateReadOnlyCollection.php
│   │   │   ├── CannotUpdateReadOnlyEntity.php
│   │   │   ├── FeatureNotImplemented.php
│   │   │   ├── NonCacheableEntity.php
│   │   │   └── NonCacheableEntityAssociation.php
│   │   ├── Lock.php
│   │   ├── LockException.php
│   │   ├── Logging/
│   │   │   ├── CacheLogger.php
│   │   │   ├── CacheLoggerChain.php
│   │   │   └── StatisticsCacheLogger.php
│   │   ├── Persister/
│   │   │   ├── CachedPersister.php
│   │   │   ├── Collection/
│   │   │   │   ├── AbstractCollectionPersister.php
│   │   │   │   ├── CachedCollectionPersister.php
│   │   │   │   ├── NonStrictReadWriteCachedCollectionPersister.php
│   │   │   │   ├── ReadOnlyCachedCollectionPersister.php
│   │   │   │   └── ReadWriteCachedCollectionPersister.php
│   │   │   └── Entity/
│   │   │       ├── AbstractEntityPersister.php
│   │   │       ├── CachedEntityPersister.php
│   │   │       ├── NonStrictReadWriteCachedEntityPersister.php
│   │   │       ├── ReadOnlyCachedEntityPersister.php
│   │   │       └── ReadWriteCachedEntityPersister.php
│   │   ├── QueryCache.php
│   │   ├── QueryCacheEntry.php
│   │   ├── QueryCacheKey.php
│   │   ├── QueryCacheValidator.php
│   │   ├── Region/
│   │   │   ├── DefaultRegion.php
│   │   │   ├── FileLockRegion.php
│   │   │   └── UpdateTimestampCache.php
│   │   ├── Region.php
│   │   ├── RegionsConfiguration.php
│   │   ├── TimestampCacheEntry.php
│   │   ├── TimestampCacheKey.php
│   │   ├── TimestampQueryCacheValidator.php
│   │   └── TimestampRegion.php
│   ├── Cache.php
│   ├── Configuration.php
│   ├── Decorator/
│   │   └── EntityManagerDecorator.php
│   ├── EntityManager.php
│   ├── EntityManagerInterface.php
│   ├── EntityNotFoundException.php
│   ├── EntityRepository.php
│   ├── Event/
│   │   ├── ListenersInvoker.php
│   │   ├── LoadClassMetadataEventArgs.php
│   │   ├── OnClassMetadataNotFoundEventArgs.php
│   │   ├── OnClearEventArgs.php
│   │   ├── OnFlushEventArgs.php
│   │   ├── PostFlushEventArgs.php
│   │   ├── PostLoadEventArgs.php
│   │   ├── PostPersistEventArgs.php
│   │   ├── PostRemoveEventArgs.php
│   │   ├── PostUpdateEventArgs.php
│   │   ├── PreFlushEventArgs.php
│   │   ├── PrePersistEventArgs.php
│   │   ├── PreRemoveEventArgs.php
│   │   └── PreUpdateEventArgs.php
│   ├── Events.php
│   ├── Exception/
│   │   ├── ConfigurationException.php
│   │   ├── DuplicateFieldException.php
│   │   ├── EntityIdentityCollisionException.php
│   │   ├── EntityManagerClosed.php
│   │   ├── EntityMissingAssignedId.php
│   │   ├── InvalidEntityRepository.php
│   │   ├── InvalidHydrationMode.php
│   │   ├── ManagerException.php
│   │   ├── MissingIdentifierField.php
│   │   ├── MissingMappingDriverImplementation.php
│   │   ├── MultipleSelectorsFoundException.php
│   │   ├── NoMatchingPropertyException.php
│   │   ├── NotSupported.php
│   │   ├── ORMException.php
│   │   ├── PersisterException.php
│   │   ├── RepositoryException.php
│   │   ├── SchemaToolException.php
│   │   ├── UnexpectedAssociationValue.php
│   │   └── UnrecognizedIdentifierFields.php
│   ├── Id/
│   │   ├── AbstractIdGenerator.php
│   │   ├── AssignedGenerator.php
│   │   ├── BigIntegerIdentityGenerator.php
│   │   ├── IdentityGenerator.php
│   │   └── SequenceGenerator.php
│   ├── Internal/
│   │   ├── Hydration/
│   │   │   ├── AbstractHydrator.php
│   │   │   ├── ArrayHydrator.php
│   │   │   ├── HydrationException.php
│   │   │   ├── ObjectHydrator.php
│   │   │   ├── ScalarColumnHydrator.php
│   │   │   ├── ScalarHydrator.php
│   │   │   ├── SimpleObjectHydrator.php
│   │   │   └── SingleScalarHydrator.php
│   │   ├── HydrationCompleteHandler.php
│   │   ├── NoUnknownNamedArguments.php
│   │   ├── SQLResultCasing.php
│   │   ├── StronglyConnectedComponents.php
│   │   ├── TopologicalSort/
│   │   │   └── CycleDetectedException.php
│   │   ├── TopologicalSort.php
│   │   └── UnitOfWork/
│   │       └── InsertBatch.php
│   ├── LazyCriteriaCollection.php
│   ├── Mapping/
│   │   ├── AnsiQuoteStrategy.php
│   │   ├── ArrayAccessImplementation.php
│   │   ├── AssociationMapping.php
│   │   ├── AssociationOverride.php
│   │   ├── AssociationOverrides.php
│   │   ├── AttributeOverride.php
│   │   ├── AttributeOverrides.php
│   │   ├── Builder/
│   │   │   ├── AssociationBuilder.php
│   │   │   ├── ClassMetadataBuilder.php
│   │   │   ├── EmbeddedBuilder.php
│   │   │   ├── EntityListenerBuilder.php
│   │   │   ├── FieldBuilder.php
│   │   │   ├── ManyToManyAssociationBuilder.php
│   │   │   └── OneToManyAssociationBuilder.php
│   │   ├── Cache.php
│   │   ├── ChainTypedFieldMapper.php
│   │   ├── ChangeTrackingPolicy.php
│   │   ├── ClassMetadata.php
│   │   ├── ClassMetadataFactory.php
│   │   ├── Column.php
│   │   ├── CustomIdGenerator.php
│   │   ├── DefaultEntityListenerResolver.php
│   │   ├── DefaultNamingStrategy.php
│   │   ├── DefaultQuoteStrategy.php
│   │   ├── DefaultTypedFieldMapper.php
│   │   ├── DiscriminatorColumn.php
│   │   ├── DiscriminatorColumnMapping.php
│   │   ├── DiscriminatorMap.php
│   │   ├── Driver/
│   │   │   ├── AttributeDriver.php
│   │   │   ├── AttributeReader.php
│   │   │   ├── DatabaseDriver.php
│   │   │   ├── LoadMappingFileImplementation.php
│   │   │   ├── ReflectionBasedDriver.php
│   │   │   ├── RepeatableAttributeCollection.php
│   │   │   ├── SimplifiedXmlDriver.php
│   │   │   └── XmlDriver.php
│   │   ├── Embeddable.php
│   │   ├── Embedded.php
│   │   ├── EmbeddedClassMapping.php
│   │   ├── Entity.php
│   │   ├── EntityListenerResolver.php
│   │   ├── EntityListeners.php
│   │   ├── Exception/
│   │   │   ├── InvalidCustomGenerator.php
│   │   │   └── UnknownGeneratorType.php
│   │   ├── FieldMapping.php
│   │   ├── GeneratedValue.php
│   │   ├── GetReflectionClassImplementation.php
│   │   ├── HasLifecycleCallbacks.php
│   │   ├── Id.php
│   │   ├── Index.php
│   │   ├── InheritanceType.php
│   │   ├── InverseJoinColumn.php
│   │   ├── InverseSideMapping.php
│   │   ├── JoinColumn.php
│   │   ├── JoinColumnMapping.php
│   │   ├── JoinColumnProperties.php
│   │   ├── JoinColumns.php
│   │   ├── JoinTable.php
│   │   ├── JoinTableMapping.php
│   │   ├── LegacyReflectionFields.php
│   │   ├── ManyToMany.php
│   │   ├── ManyToManyAssociationMapping.php
│   │   ├── ManyToManyInverseSideMapping.php
│   │   ├── ManyToManyOwningSideMapping.php
│   │   ├── ManyToOne.php
│   │   ├── ManyToOneAssociationMapping.php
│   │   ├── MappedSuperclass.php
│   │   ├── MappingAttribute.php
│   │   ├── MappingException.php
│   │   ├── NamingStrategy.php
│   │   ├── OneToMany.php
│   │   ├── OneToManyAssociationMapping.php
│   │   ├── OneToOne.php
│   │   ├── OneToOneAssociationMapping.php
│   │   ├── OneToOneInverseSideMapping.php
│   │   ├── OneToOneOwningSideMapping.php
│   │   ├── OrderBy.php
│   │   ├── OwningSideMapping.php
│   │   ├── PostLoad.php
│   │   ├── PostPersist.php
│   │   ├── PostRemove.php
│   │   ├── PostUpdate.php
│   │   ├── PreFlush.php
│   │   ├── PrePersist.php
│   │   ├── PreRemove.php
│   │   ├── PreUpdate.php
│   │   ├── PropertyAccessors/
│   │   │   ├── EmbeddablePropertyAccessor.php
│   │   │   ├── EnumPropertyAccessor.php
│   │   │   ├── ObjectCastPropertyAccessor.php
│   │   │   ├── PropertyAccessor.php
│   │   │   ├── PropertyAccessorFactory.php
│   │   │   ├── RawValuePropertyAccessor.php
│   │   │   ├── ReadonlyAccessor.php
│   │   │   └── TypedNoDefaultPropertyAccessor.php
│   │   ├── QuoteStrategy.php
│   │   ├── ReflectionEmbeddedProperty.php
│   │   ├── ReflectionEnumProperty.php
│   │   ├── ReflectionReadonlyProperty.php
│   │   ├── SequenceGenerator.php
│   │   ├── Table.php
│   │   ├── ToManyAssociationMapping.php
│   │   ├── ToManyAssociationMappingImplementation.php
│   │   ├── ToManyInverseSideMapping.php
│   │   ├── ToManyOwningSideMapping.php
│   │   ├── ToOneAssociationMapping.php
│   │   ├── ToOneInverseSideMapping.php
│   │   ├── ToOneOwningSideMapping.php
│   │   ├── TypedFieldMapper.php
│   │   ├── UnderscoreNamingStrategy.php
│   │   ├── UniqueConstraint.php
│   │   └── Version.php
│   ├── NativeQuery.php
│   ├── NoResultException.php
│   ├── NonUniqueResultException.php
│   ├── ORMInvalidArgumentException.php
│   ├── ORMSetup.php
│   ├── OptimisticLockException.php
│   ├── PersistentCollection.php
│   ├── Persisters/
│   │   ├── Collection/
│   │   │   ├── AbstractCollectionPersister.php
│   │   │   ├── CollectionPersister.php
│   │   │   ├── ManyToManyPersister.php
│   │   │   └── OneToManyPersister.php
│   │   ├── Entity/
│   │   │   ├── AbstractEntityInheritancePersister.php
│   │   │   ├── BasicEntityPersister.php
│   │   │   ├── CachedPersisterContext.php
│   │   │   ├── EntityPersister.php
│   │   │   ├── JoinedSubclassPersister.php
│   │   │   └── SingleTablePersister.php
│   │   ├── Exception/
│   │   │   ├── CantUseInOperatorOnCompositeKeys.php
│   │   │   ├── InvalidOrientation.php
│   │   │   └── UnrecognizedField.php
│   │   ├── MatchingAssociationFieldRequiresObject.php
│   │   ├── PersisterException.php
│   │   ├── SqlExpressionVisitor.php
│   │   └── SqlValueVisitor.php
│   ├── PessimisticLockException.php
│   ├── Proxy/
│   │   ├── Autoloader.php
│   │   ├── DefaultProxyClassNameResolver.php
│   │   ├── InternalProxy.php
│   │   ├── NotAProxyClass.php
│   │   └── ProxyFactory.php
│   ├── Query/
│   │   ├── AST/
│   │   │   ├── ASTException.php
│   │   │   ├── AggregateExpression.php
│   │   │   ├── ArithmeticExpression.php
│   │   │   ├── ArithmeticFactor.php
│   │   │   ├── ArithmeticTerm.php
│   │   │   ├── BetweenExpression.php
│   │   │   ├── CoalesceExpression.php
│   │   │   ├── CollectionMemberExpression.php
│   │   │   ├── ComparisonExpression.php
│   │   │   ├── ConditionalExpression.php
│   │   │   ├── ConditionalFactor.php
│   │   │   ├── ConditionalPrimary.php
│   │   │   ├── ConditionalTerm.php
│   │   │   ├── DeleteClause.php
│   │   │   ├── DeleteStatement.php
│   │   │   ├── EmptyCollectionComparisonExpression.php
│   │   │   ├── EntityAsDtoArgumentExpression.php
│   │   │   ├── ExistsExpression.php
│   │   │   ├── FromClause.php
│   │   │   ├── Functions/
│   │   │   │   ├── AbsFunction.php
│   │   │   │   ├── AvgFunction.php
│   │   │   │   ├── BitAndFunction.php
│   │   │   │   ├── BitOrFunction.php
│   │   │   │   ├── ConcatFunction.php
│   │   │   │   ├── CountFunction.php
│   │   │   │   ├── CurrentDateFunction.php
│   │   │   │   ├── CurrentTimeFunction.php
│   │   │   │   ├── CurrentTimestampFunction.php
│   │   │   │   ├── DateAddFunction.php
│   │   │   │   ├── DateDiffFunction.php
│   │   │   │   ├── DateSubFunction.php
│   │   │   │   ├── FunctionNode.php
│   │   │   │   ├── IdentityFunction.php
│   │   │   │   ├── LengthFunction.php
│   │   │   │   ├── LocateFunction.php
│   │   │   │   ├── LowerFunction.php
│   │   │   │   ├── MaxFunction.php
│   │   │   │   ├── MinFunction.php
│   │   │   │   ├── ModFunction.php
│   │   │   │   ├── SizeFunction.php
│   │   │   │   ├── SqrtFunction.php
│   │   │   │   ├── SubstringFunction.php
│   │   │   │   ├── SumFunction.php
│   │   │   │   ├── TrimFunction.php
│   │   │   │   └── UpperFunction.php
│   │   │   ├── GeneralCaseExpression.php
│   │   │   ├── GroupByClause.php
│   │   │   ├── HavingClause.php
│   │   │   ├── IdentificationVariableDeclaration.php
│   │   │   ├── InListExpression.php
│   │   │   ├── InSubselectExpression.php
│   │   │   ├── IndexBy.php
│   │   │   ├── InputParameter.php
│   │   │   ├── InstanceOfExpression.php
│   │   │   ├── Join.php
│   │   │   ├── JoinAssociationDeclaration.php
│   │   │   ├── JoinAssociationPathExpression.php
│   │   │   ├── JoinClassPathExpression.php
│   │   │   ├── JoinVariableDeclaration.php
│   │   │   ├── LikeExpression.php
│   │   │   ├── Literal.php
│   │   │   ├── NewObjectExpression.php
│   │   │   ├── Node.php
│   │   │   ├── NullComparisonExpression.php
│   │   │   ├── NullIfExpression.php
│   │   │   ├── OrderByClause.php
│   │   │   ├── OrderByItem.php
│   │   │   ├── ParenthesisExpression.php
│   │   │   ├── PartialObjectExpression.php
│   │   │   ├── PathExpression.php
│   │   │   ├── Phase2OptimizableConditional.php
│   │   │   ├── QuantifiedExpression.php
│   │   │   ├── RangeVariableDeclaration.php
│   │   │   ├── SelectClause.php
│   │   │   ├── SelectExpression.php
│   │   │   ├── SelectStatement.php
│   │   │   ├── SimpleArithmeticExpression.php
│   │   │   ├── SimpleCaseExpression.php
│   │   │   ├── SimpleSelectClause.php
│   │   │   ├── SimpleSelectExpression.php
│   │   │   ├── SimpleWhenClause.php
│   │   │   ├── Subselect.php
│   │   │   ├── SubselectFromClause.php
│   │   │   ├── SubselectIdentificationVariableDeclaration.php
│   │   │   ├── TypedExpression.php
│   │   │   ├── UpdateClause.php
│   │   │   ├── UpdateItem.php
│   │   │   ├── UpdateStatement.php
│   │   │   ├── WhenClause.php
│   │   │   └── WhereClause.php
│   │   ├── Exec/
│   │   │   ├── AbstractSqlExecutor.php
│   │   │   ├── FinalizedSelectExecutor.php
│   │   │   ├── MultiTableDeleteExecutor.php
│   │   │   ├── MultiTableUpdateExecutor.php
│   │   │   ├── PreparedExecutorFinalizer.php
│   │   │   ├── SingleSelectExecutor.php
│   │   │   ├── SingleSelectSqlFinalizer.php
│   │   │   ├── SingleTableDeleteUpdateExecutor.php
│   │   │   └── SqlFinalizer.php
│   │   ├── Expr/
│   │   │   ├── Andx.php
│   │   │   ├── Base.php
│   │   │   ├── Comparison.php
│   │   │   ├── Composite.php
│   │   │   ├── From.php
│   │   │   ├── Func.php
│   │   │   ├── GroupBy.php
│   │   │   ├── Join.php
│   │   │   ├── Literal.php
│   │   │   ├── Math.php
│   │   │   ├── OrderBy.php
│   │   │   ├── Orx.php
│   │   │   └── Select.php
│   │   ├── Expr.php
│   │   ├── Filter/
│   │   │   ├── FilterException.php
│   │   │   ├── Parameter.php
│   │   │   └── SQLFilter.php
│   │   ├── FilterCollection.php
│   │   ├── Lexer.php
│   │   ├── OutputWalker.php
│   │   ├── Parameter.php
│   │   ├── ParameterTypeInferer.php
│   │   ├── Parser.php
│   │   ├── ParserResult.php
│   │   ├── Printer.php
│   │   ├── QueryException.php
│   │   ├── QueryExpressionVisitor.php
│   │   ├── ResultSetMapping.php
│   │   ├── ResultSetMappingBuilder.php
│   │   ├── SqlOutputWalker.php
│   │   ├── SqlWalker.php
│   │   ├── TokenType.php
│   │   ├── TreeWalker.php
│   │   ├── TreeWalkerAdapter.php
│   │   └── TreeWalkerChain.php
│   ├── Query.php
│   ├── QueryBuilder.php
│   ├── QueryType.php
│   ├── Repository/
│   │   ├── DefaultRepositoryFactory.php
│   │   ├── Exception/
│   │   │   ├── InvalidFindByCall.php
│   │   │   └── InvalidMagicMethodCall.php
│   │   └── RepositoryFactory.php
│   ├── Tools/
│   │   ├── AttachEntityListenersListener.php
│   │   ├── Console/
│   │   │   ├── ApplicationCompatibility.php
│   │   │   ├── Command/
│   │   │   │   ├── AbstractEntityManagerCommand.php
│   │   │   │   ├── ClearCache/
│   │   │   │   │   ├── CollectionRegionCommand.php
│   │   │   │   │   ├── EntityRegionCommand.php
│   │   │   │   │   ├── MetadataCommand.php
│   │   │   │   │   ├── QueryCommand.php
│   │   │   │   │   ├── QueryRegionCommand.php
│   │   │   │   │   └── ResultCommand.php
│   │   │   │   ├── Debug/
│   │   │   │   │   ├── AbstractCommand.php
│   │   │   │   │   ├── DebugEntityListenersDoctrineCommand.php
│   │   │   │   │   └── DebugEventManagerDoctrineCommand.php
│   │   │   │   ├── GenerateProxiesCommand.php
│   │   │   │   ├── InfoCommand.php
│   │   │   │   ├── MappingDescribeCommand.php
│   │   │   │   ├── MappingDescribeCommandFormat.php
│   │   │   │   ├── RunDqlCommand.php
│   │   │   │   ├── SchemaTool/
│   │   │   │   │   ├── AbstractCommand.php
│   │   │   │   │   ├── CreateCommand.php
│   │   │   │   │   ├── DropCommand.php
│   │   │   │   │   └── UpdateCommand.php
│   │   │   │   └── ValidateSchemaCommand.php
│   │   │   ├── ConsoleRunner.php
│   │   │   ├── EntityManagerProvider/
│   │   │   │   ├── ConnectionFromManagerProvider.php
│   │   │   │   ├── SingleManagerProvider.php
│   │   │   │   └── UnknownManagerException.php
│   │   │   ├── EntityManagerProvider.php
│   │   │   └── MetadataFilter.php
│   │   ├── Debug.php
│   │   ├── DebugUnitOfWorkListener.php
│   │   ├── Event/
│   │   │   ├── GenerateSchemaEventArgs.php
│   │   │   └── GenerateSchemaTableEventArgs.php
│   │   ├── Exception/
│   │   │   ├── MissingColumnException.php
│   │   │   └── NotSupported.php
│   │   ├── Pagination/
│   │   │   ├── CountOutputWalker.php
│   │   │   ├── CountWalker.php
│   │   │   ├── Exception/
│   │   │   │   └── RowNumberOverFunctionNotEnabled.php
│   │   │   ├── LimitSubqueryOutputWalker.php
│   │   │   ├── LimitSubqueryWalker.php
│   │   │   ├── Paginator.php
│   │   │   ├── RootTypeWalker.php
│   │   │   ├── RowNumberOverFunction.php
│   │   │   └── WhereInWalker.php
│   │   ├── ResolveTargetEntityListener.php
│   │   ├── SchemaTool.php
│   │   ├── SchemaValidator.php
│   │   ├── ToolEvents.php
│   │   └── ToolsException.php
│   ├── TransactionRequiredException.php
│   ├── UnexpectedResultException.php
│   ├── UnitOfWork.php
│   └── Utility/
│       ├── HierarchyDiscriminatorResolver.php
│       ├── IdentifierFlattener.php
│       ├── LockSqlHelper.php
│       └── PersisterHelper.php
└── tests/
    ├── .gitignore
    ├── Doctrine/
    │   └── Tests/
    │       └── ORM/
    │           └── Functional/
    │               ├── GH8011Test.php
    │               └── Ticket/
    │                   ├── GH12063Test.php
    │                   └── LazyEagerCollectionTest.php
    ├── Performance/
    │   ├── ChangeSet/
    │   │   └── UnitOfWorkComputeChangesBench.php
    │   ├── EntityManagerFactory.php
    │   ├── Hydration/
    │   │   ├── MixedQueryFetchJoinArrayHydrationPerformanceBench.php
    │   │   ├── MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php
    │   │   ├── MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php
    │   │   ├── SimpleHydrationBench.php
    │   │   ├── SimpleInsertPerformanceBench.php
    │   │   ├── SimpleQueryArrayHydrationPerformanceBench.php
    │   │   ├── SimpleQueryFullObjectHydrationPerformanceBench.php
    │   │   ├── SimpleQueryPartialObjectHydrationPerformanceBench.php
    │   │   ├── SimpleQueryScalarHydrationPerformanceBench.php
    │   │   ├── SingleTableInheritanceHydrationPerformanceBench.php
    │   │   └── SingleTableInheritanceInsertPerformanceBench.php
    │   ├── LazyLoading/
    │   │   ├── ProxyInitializationTimeBench.php
    │   │   └── ProxyInstantiationTimeBench.php
    │   ├── Mock/
    │   │   ├── NonLoadingPersister.php
    │   │   ├── NonProxyLoadingEntityManager.php
    │   │   └── NonProxyLoadingUnitOfWork.php
    │   └── Query/
    │       └── QueryBoundParameterProcessingBench.php
    ├── README.markdown
    ├── StaticAnalysis/
    │   ├── Mapping/
    │   │   └── class-metadata-constructor.php
    │   ├── Tools/
    │   │   └── Pagination/
    │   │       └── paginator-covariant.php
    │   └── get-metadata.php
    ├── Tests/
    │   ├── DbalExtensions/
    │   │   ├── Connection.php
    │   │   ├── QueryLog.php
    │   │   └── SqlLogger.php
    │   ├── DbalTypes/
    │   │   ├── CustomIdObject.php
    │   │   ├── CustomIdObjectType.php
    │   │   ├── CustomIntType.php
    │   │   ├── GH8565EmployeePayloadType.php
    │   │   ├── GH8565ManagerPayloadType.php
    │   │   ├── NegativeToPositiveType.php
    │   │   ├── Rot13Type.php
    │   │   └── UpperCaseStringType.php
    │   ├── EventListener/
    │   │   └── CacheMetadataListener.php
    │   ├── IterableTester.php
    │   ├── Mocks/
    │   │   ├── ArrayResultFactory.php
    │   │   ├── AttributeDriverFactory.php
    │   │   ├── CacheEntryMock.php
    │   │   ├── CacheKeyMock.php
    │   │   ├── CacheRegionMock.php
    │   │   ├── CompatibilityType.php
    │   │   ├── ConcurrentRegionMock.php
    │   │   ├── CustomTreeWalkerJoin.php
    │   │   ├── EntityManagerMock.php
    │   │   ├── EntityPersisterMock.php
    │   │   ├── ExceptionConverterMock.php
    │   │   ├── MetadataDriverMock.php
    │   │   ├── NullSqlWalker.php
    │   │   ├── SchemaManagerMock.php
    │   │   ├── TimestampRegionMock.php
    │   │   └── UnitOfWorkMock.php
    │   ├── Models/
    │   │   ├── AbstractFetchEager/
    │   │   │   ├── AbstractRemoteControl.php
    │   │   │   ├── MobileRemoteControl.php
    │   │   │   └── User.php
    │   │   ├── BigIntegers/
    │   │   │   └── BigIntegers.php
    │   │   ├── BinaryPrimaryKey/
    │   │   │   ├── BinaryId.php
    │   │   │   ├── BinaryIdType.php
    │   │   │   └── Category.php
    │   │   ├── CMS/
    │   │   │   ├── CmsAddress.php
    │   │   │   ├── CmsAddressDTO.php
    │   │   │   ├── CmsAddressDTONamedArgs.php
    │   │   │   ├── CmsAddressListener.php
    │   │   │   ├── CmsArticle.php
    │   │   │   ├── CmsComment.php
    │   │   │   ├── CmsDumbDTO.php
    │   │   │   ├── CmsEmail.php
    │   │   │   ├── CmsEmployee.php
    │   │   │   ├── CmsGroup.php
    │   │   │   ├── CmsPhonenumber.php
    │   │   │   ├── CmsTag.php
    │   │   │   ├── CmsUser.php
    │   │   │   ├── CmsUserDTO.php
    │   │   │   ├── CmsUserDTONamedArgs.php
    │   │   │   └── CmsUserDTOVariadicArg.php
    │   │   ├── Cache/
    │   │   │   ├── Action.php
    │   │   │   ├── Address.php
    │   │   │   ├── Attraction.php
    │   │   │   ├── AttractionContactInfo.php
    │   │   │   ├── AttractionInfo.php
    │   │   │   ├── AttractionLocationInfo.php
    │   │   │   ├── Bar.php
    │   │   │   ├── Beach.php
    │   │   │   ├── City.php
    │   │   │   ├── Client.php
    │   │   │   ├── ComplexAction.php
    │   │   │   ├── Country.php
    │   │   │   ├── Flight.php
    │   │   │   ├── Login.php
    │   │   │   ├── Person.php
    │   │   │   ├── Restaurant.php
    │   │   │   ├── State.php
    │   │   │   ├── Token.php
    │   │   │   ├── Travel.php
    │   │   │   ├── Traveler.php
    │   │   │   ├── TravelerProfile.php
    │   │   │   └── TravelerProfileInfo.php
    │   │   ├── Company/
    │   │   │   ├── CompanyAuction.php
    │   │   │   ├── CompanyCar.php
    │   │   │   ├── CompanyContract.php
    │   │   │   ├── CompanyContractListener.php
    │   │   │   ├── CompanyEmployee.php
    │   │   │   ├── CompanyEvent.php
    │   │   │   ├── CompanyFixContract.php
    │   │   │   ├── CompanyFlexContract.php
    │   │   │   ├── CompanyFlexUltraContract.php
    │   │   │   ├── CompanyFlexUltraContractListener.php
    │   │   │   ├── CompanyManager.php
    │   │   │   ├── CompanyOrganization.php
    │   │   │   ├── CompanyPerson.php
    │   │   │   └── CompanyRaffle.php
    │   │   ├── CompositeKeyInheritance/
    │   │   │   ├── JoinedChildClass.php
    │   │   │   ├── JoinedDerivedChildClass.php
    │   │   │   ├── JoinedDerivedIdentityClass.php
    │   │   │   ├── JoinedDerivedRootClass.php
    │   │   │   ├── JoinedRootClass.php
    │   │   │   ├── SingleChildClass.php
    │   │   │   └── SingleRootClass.php
    │   │   ├── CompositeKeyRelations/
    │   │   │   ├── CustomerClass.php
    │   │   │   └── InvoiceClass.php
    │   │   ├── CustomType/
    │   │   │   ├── CustomIdObjectTypeChild.php
    │   │   │   ├── CustomIdObjectTypeParent.php
    │   │   │   ├── CustomTypeChild.php
    │   │   │   ├── CustomTypeParent.php
    │   │   │   └── CustomTypeUpperCase.php
    │   │   ├── Customer/
    │   │   │   ├── CustomerType.php
    │   │   │   ├── ExternalCustomer.php
    │   │   │   └── InternalCustomer.php
    │   │   ├── DDC117/
    │   │   │   ├── DDC117ApproveChanges.php
    │   │   │   ├── DDC117Article.php
    │   │   │   ├── DDC117ArticleDetails.php
    │   │   │   ├── DDC117Editor.php
    │   │   │   ├── DDC117Link.php
    │   │   │   ├── DDC117Reference.php
    │   │   │   └── DDC117Translation.php
    │   │   ├── DDC1476/
    │   │   │   └── DDC1476EntityWithDefaultFieldType.php
    │   │   ├── DDC1590/
    │   │   │   ├── DDC1590Entity.php
    │   │   │   └── DDC1590User.php
    │   │   ├── DDC1872/
    │   │   │   ├── DDC1872Bar.php
    │   │   │   ├── DDC1872ExampleEntityWithOverride.php
    │   │   │   ├── DDC1872ExampleEntityWithoutOverride.php
    │   │   │   └── DDC1872ExampleTrait.php
    │   │   ├── DDC2372/
    │   │   │   ├── DDC2372Address.php
    │   │   │   ├── DDC2372Admin.php
    │   │   │   ├── DDC2372User.php
    │   │   │   └── Traits/
    │   │   │       └── DDC2372AddressAndAccessors.php
    │   │   ├── DDC2504/
    │   │   │   ├── DDC2504ChildClass.php
    │   │   │   ├── DDC2504OtherClass.php
    │   │   │   └── DDC2504RootClass.php
    │   │   ├── DDC2825/
    │   │   │   ├── ExplicitSchemaAndTable.php
    │   │   │   └── SchemaAndTableInTableName.php
    │   │   ├── DDC3231/
    │   │   │   ├── DDC3231EntityRepository.php
    │   │   │   ├── DDC3231User1.php
    │   │   │   ├── DDC3231User1NoNamespace.php
    │   │   │   ├── DDC3231User2.php
    │   │   │   └── DDC3231User2NoNamespace.php
    │   │   ├── DDC3293/
    │   │   │   ├── DDC3293Address.php
    │   │   │   ├── DDC3293User.php
    │   │   │   └── DDC3293UserPrefixed.php
    │   │   ├── DDC3346/
    │   │   │   ├── DDC3346Article.php
    │   │   │   └── DDC3346Author.php
    │   │   ├── DDC3579/
    │   │   │   ├── DDC3579Admin.php
    │   │   │   ├── DDC3579Group.php
    │   │   │   └── DDC3579User.php
    │   │   ├── DDC3597/
    │   │   │   ├── DDC3597Image.php
    │   │   │   ├── DDC3597Media.php
    │   │   │   ├── DDC3597Root.php
    │   │   │   └── Embeddable/
    │   │   │       └── DDC3597Dimension.php
    │   │   ├── DDC3699/
    │   │   │   ├── DDC3699Child.php
    │   │   │   ├── DDC3699Parent.php
    │   │   │   ├── DDC3699RelationMany.php
    │   │   │   └── DDC3699RelationOne.php
    │   │   ├── DDC3711/
    │   │   │   ├── DDC3711EntityA.php
    │   │   │   └── DDC3711EntityB.php
    │   │   ├── DDC3899/
    │   │   │   ├── DDC3899Contract.php
    │   │   │   ├── DDC3899FixContract.php
    │   │   │   ├── DDC3899FlexContract.php
    │   │   │   └── DDC3899User.php
    │   │   ├── DDC4006/
    │   │   │   ├── DDC4006User.php
    │   │   │   └── DDC4006UserId.php
    │   │   ├── DDC5934/
    │   │   │   ├── DDC5934BaseContract.php
    │   │   │   ├── DDC5934Contract.php
    │   │   │   └── DDC5934Member.php
    │   │   ├── DDC6412/
    │   │   │   └── DDC6412File.php
    │   │   ├── DDC6573/
    │   │   │   ├── DDC6573Currency.php
    │   │   │   ├── DDC6573Item.php
    │   │   │   └── DDC6573Money.php
    │   │   ├── DDC753/
    │   │   │   ├── DDC753CustomRepository.php
    │   │   │   ├── DDC753DefaultRepository.php
    │   │   │   ├── DDC753EntityWithCustomRepository.php
    │   │   │   ├── DDC753EntityWithDefaultCustomRepository.php
    │   │   │   ├── DDC753EntityWithInvalidRepository.php
    │   │   │   └── DDC753InvalidRepository.php
    │   │   ├── DDC869/
    │   │   │   ├── DDC869ChequePayment.php
    │   │   │   ├── DDC869CreditCardPayment.php
    │   │   │   ├── DDC869Payment.php
    │   │   │   └── DDC869PaymentRepository.php
    │   │   ├── DDC889/
    │   │   │   ├── DDC889Class.php
    │   │   │   ├── DDC889Entity.php
    │   │   │   └── DDC889SuperClass.php
    │   │   ├── DDC964/
    │   │   │   ├── DDC964Address.php
    │   │   │   ├── DDC964Admin.php
    │   │   │   ├── DDC964Group.php
    │   │   │   ├── DDC964Guest.php
    │   │   │   └── DDC964User.php
    │   │   ├── DataTransferObjects/
    │   │   │   ├── DtoWithArrayOfEnums.php
    │   │   │   └── DtoWithEnum.php
    │   │   ├── DirectoryTree/
    │   │   │   ├── AbstractContentItem.php
    │   │   │   ├── Directory.php
    │   │   │   └── File.php
    │   │   ├── ECommerce/
    │   │   │   ├── ECommerceCart.php
    │   │   │   ├── ECommerceCategory.php
    │   │   │   ├── ECommerceCustomer.php
    │   │   │   ├── ECommerceFeature.php
    │   │   │   ├── ECommerceProduct.php
    │   │   │   ├── ECommerceProduct2.php
    │   │   │   └── ECommerceShipping.php
    │   │   ├── EagerFetchedCompositeOneToMany/
    │   │   │   ├── RootEntity.php
    │   │   │   ├── SecondLevel.php
    │   │   │   └── SecondLevelWithoutCompositePrimaryKey.php
    │   │   ├── Enums/
    │   │   │   ├── AccessLevel.php
    │   │   │   ├── BookCategory.php
    │   │   │   ├── BookGenre.php
    │   │   │   ├── BookWithGenre.php
    │   │   │   ├── Card.php
    │   │   │   ├── CardNativeEnum.php
    │   │   │   ├── CardWithDefault.php
    │   │   │   ├── CardWithNullable.php
    │   │   │   ├── City.php
    │   │   │   ├── FaultySwitch.php
    │   │   │   ├── Library.php
    │   │   │   ├── Product.php
    │   │   │   ├── Quantity.php
    │   │   │   ├── Scale.php
    │   │   │   ├── Suit.php
    │   │   │   ├── SwitchStatus.php
    │   │   │   ├── TypedCard.php
    │   │   │   ├── TypedCardEnumCompositeId.php
    │   │   │   ├── TypedCardEnumId.php
    │   │   │   ├── TypedCardNativeEnum.php
    │   │   │   ├── Unit.php
    │   │   │   └── UserStatus.php
    │   │   ├── Forum/
    │   │   │   ├── ForumAvatar.php
    │   │   │   ├── ForumBoard.php
    │   │   │   ├── ForumCategory.php
    │   │   │   ├── ForumEntry.php
    │   │   │   └── ForumUser.php
    │   │   ├── GH10132/
    │   │   │   ├── Complex.php
    │   │   │   └── ComplexChild.php
    │   │   ├── GH10288/
    │   │   │   └── GH10288People.php
    │   │   ├── GH10334/
    │   │   │   ├── GH10334Foo.php
    │   │   │   ├── GH10334FooCollection.php
    │   │   │   ├── GH10334Product.php
    │   │   │   ├── GH10334ProductType.php
    │   │   │   └── GH10334ProductTypeId.php
    │   │   ├── GH10336/
    │   │   │   ├── GH10336Entity.php
    │   │   │   └── GH10336Relation.php
    │   │   ├── GH11524/
    │   │   │   ├── GH11524Entity.php
    │   │   │   ├── GH11524Listener.php
    │   │   │   └── GH11524Relation.php
    │   │   ├── GH7141/
    │   │   │   └── GH7141Article.php
    │   │   ├── GH7316/
    │   │   │   └── GH7316Article.php
    │   │   ├── GH7717/
    │   │   │   ├── GH7717Child.php
    │   │   │   └── GH7717Parent.php
    │   │   ├── GH8565/
    │   │   │   ├── GH8565Employee.php
    │   │   │   ├── GH8565Manager.php
    │   │   │   └── GH8565Person.php
    │   │   ├── Generic/
    │   │   │   ├── BooleanModel.php
    │   │   │   ├── DateTimeModel.php
    │   │   │   ├── DecimalModel.php
    │   │   │   ├── NonAlphaColumnsEntity.php
    │   │   │   └── SerializationModel.php
    │   │   ├── GeoNames/
    │   │   │   ├── Admin1.php
    │   │   │   ├── Admin1AlternateName.php
    │   │   │   ├── City.php
    │   │   │   └── Country.php
    │   │   ├── Global/
    │   │   │   └── GlobalNamespaceModel.php
    │   │   ├── Hydration/
    │   │   │   ├── EntityWithArrayDefaultArrayValueM2M.php
    │   │   │   └── SimpleEntity.php
    │   │   ├── InvalidXml.php
    │   │   ├── Issue5989/
    │   │   │   ├── Issue5989Employee.php
    │   │   │   ├── Issue5989Manager.php
    │   │   │   └── Issue5989Person.php
    │   │   ├── Issue9300/
    │   │   │   ├── Issue9300Child.php
    │   │   │   └── Issue9300Parent.php
    │   │   ├── JoinedInheritanceType/
    │   │   │   ├── AnotherChildClass.php
    │   │   │   ├── ChildClass.php
    │   │   │   └── RootClass.php
    │   │   ├── Legacy/
    │   │   │   ├── LegacyArticle.php
    │   │   │   ├── LegacyCar.php
    │   │   │   ├── LegacyUser.php
    │   │   │   └── LegacyUserReference.php
    │   │   ├── ManyToManyPersister/
    │   │   │   ├── ChildClass.php
    │   │   │   ├── OtherParentClass.php
    │   │   │   └── ParentClass.php
    │   │   ├── MixedToOneIdentity/
    │   │   │   ├── CompositeToOneKeyState.php
    │   │   │   └── Country.php
    │   │   ├── Navigation/
    │   │   │   ├── NavCountry.php
    │   │   │   ├── NavPhotos.php
    │   │   │   ├── NavPointOfInterest.php
    │   │   │   ├── NavTour.php
    │   │   │   └── NavUser.php
    │   │   ├── NonPublicSchemaJoins/
    │   │   │   └── User.php
    │   │   ├── NullDefault/
    │   │   │   └── NullDefaultColumn.php
    │   │   ├── OneToOneInverseSideLoad/
    │   │   │   ├── InverseSide.php
    │   │   │   └── OwningSide.php
    │   │   ├── OneToOneInverseSideWithAssociativeIdLoad/
    │   │   │   ├── InverseSide.php
    │   │   │   ├── InverseSideIdTarget.php
    │   │   │   └── OwningSide.php
    │   │   ├── OneToOneSingleTableInheritance/
    │   │   │   ├── Cat.php
    │   │   │   ├── LitterBox.php
    │   │   │   └── Pet.php
    │   │   ├── Pagination/
    │   │   │   ├── Company.php
    │   │   │   ├── Department.php
    │   │   │   ├── Logo.php
    │   │   │   ├── User.php
    │   │   │   └── User1.php
    │   │   ├── PersistentObject/
    │   │   │   ├── PersistentCollectionContent.php
    │   │   │   ├── PersistentCollectionHolder.php
    │   │   │   └── PersistentEntity.php
    │   │   ├── Project/
    │   │   │   ├── Project.php
    │   │   │   ├── ProjectId.php
    │   │   │   ├── ProjectInvalidMapping.php
    │   │   │   └── ProjectName.php
    │   │   ├── PropertyHooks/
    │   │   │   ├── MappingVirtualProperty.php
    │   │   │   └── User.php
    │   │   ├── Quote/
    │   │   │   ├── Address.php
    │   │   │   ├── City.php
    │   │   │   ├── FullAddress.php
    │   │   │   ├── Group.php
    │   │   │   ├── NumericEntity.php
    │   │   │   ├── Phone.php
    │   │   │   └── User.php
    │   │   ├── ReadonlyProperties/
    │   │   │   ├── Author.php
    │   │   │   ├── Book.php
    │   │   │   └── SimpleBook.php
    │   │   ├── Reflection/
    │   │   │   ├── AbstractEmbeddable.php
    │   │   │   ├── ArrayObjectExtendingClass.php
    │   │   │   ├── ClassWithMixedProperties.php
    │   │   │   ├── ConcreteEmbeddable.php
    │   │   │   └── ParentClass.php
    │   │   ├── Routing/
    │   │   │   ├── RoutingLeg.php
    │   │   │   ├── RoutingLocation.php
    │   │   │   ├── RoutingRoute.php
    │   │   │   └── RoutingRouteBooking.php
    │   │   ├── StockExchange/
    │   │   │   ├── Bond.php
    │   │   │   ├── Market.php
    │   │   │   └── Stock.php
    │   │   ├── Taxi/
    │   │   │   ├── Car.php
    │   │   │   ├── Driver.php
    │   │   │   ├── PaidRide.php
    │   │   │   └── Ride.php
    │   │   ├── Tweet/
    │   │   │   ├── Tweet.php
    │   │   │   ├── User.php
    │   │   │   └── UserList.php
    │   │   ├── TypedProperties/
    │   │   │   ├── Contact.php
    │   │   │   ├── UserTyped.php
    │   │   │   └── UserTypedWithCustomTypedField.php
    │   │   ├── Upsertable/
    │   │   │   ├── Insertable.php
    │   │   │   └── Updatable.php
    │   │   ├── ValueConversionType/
    │   │   │   ├── AuxiliaryEntity.php
    │   │   │   ├── InversedManyToManyCompositeIdEntity.php
    │   │   │   ├── InversedManyToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedManyToManyEntity.php
    │   │   │   ├── InversedManyToManyExtraLazyEntity.php
    │   │   │   ├── InversedOneToManyCompositeIdEntity.php
    │   │   │   ├── InversedOneToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedOneToManyEntity.php
    │   │   │   ├── InversedOneToManyExtraLazyEntity.php
    │   │   │   ├── InversedOneToOneCompositeIdEntity.php
    │   │   │   ├── InversedOneToOneCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedOneToOneEntity.php
    │   │   │   ├── OwningManyToManyCompositeIdEntity.php
    │   │   │   ├── OwningManyToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── OwningManyToManyEntity.php
    │   │   │   ├── OwningManyToManyExtraLazyEntity.php
    │   │   │   ├── OwningManyToOneCompositeIdEntity.php
    │   │   │   ├── OwningManyToOneCompositeIdForeignKeyEntity.php
    │   │   │   ├── OwningManyToOneEntity.php
    │   │   │   ├── OwningManyToOneExtraLazyEntity.php
    │   │   │   ├── OwningManyToOneIdForeignKeyEntity.php
    │   │   │   ├── OwningOneToOneCompositeIdEntity.php
    │   │   │   ├── OwningOneToOneCompositeIdForeignKeyEntity.php
    │   │   │   └── OwningOneToOneEntity.php
    │   │   ├── ValueObjects/
    │   │   │   ├── Name.php
    │   │   │   └── Person.php
    │   │   ├── VersionedManyToOne/
    │   │   │   ├── Article.php
    │   │   │   └── Category.php
    │   │   └── VersionedOneToOne/
    │   │       ├── FirstRelatedEntity.php
    │   │       └── SecondRelatedEntity.php
    │   ├── ORM/
    │   │   ├── AbstractQueryTest.php
    │   │   ├── Cache/
    │   │   │   ├── CacheConfigTest.php
    │   │   │   ├── CacheKeyTest.php
    │   │   │   ├── CacheLoggerChainTest.php
    │   │   │   ├── DefaultCacheFactoryTest.php
    │   │   │   ├── DefaultCacheTest.php
    │   │   │   ├── DefaultCollectionHydratorTest.php
    │   │   │   ├── DefaultEntityHydratorTest.php
    │   │   │   ├── DefaultQueryCacheTest.php
    │   │   │   ├── DefaultRegionTest.php
    │   │   │   ├── FileLockRegionTest.php
    │   │   │   ├── Persister/
    │   │   │   │   ├── Collection/
    │   │   │   │   │   ├── CollectionPersisterTestCase.php
    │   │   │   │   │   ├── NonStrictReadWriteCachedCollectionPersisterTest.php
    │   │   │   │   │   ├── ReadOnlyCachedCollectionPersisterTest.php
    │   │   │   │   │   └── ReadWriteCachedCollectionPersisterTest.php
    │   │   │   │   └── Entity/
    │   │   │   │       ├── EntityPersisterTestCase.php
    │   │   │   │       ├── NonStrictReadWriteCachedEntityPersisterTest.php
    │   │   │   │       ├── ReadOnlyCachedEntityPersisterTest.php
    │   │   │   │       └── ReadWriteCachedEntityPersisterTest.php
    │   │   │   ├── RegionTestCase.php
    │   │   │   └── StatisticsCacheLoggerTest.php
    │   │   ├── ConfigurationTest.php
    │   │   ├── Entity/
    │   │   │   └── ConstructorTest.php
    │   │   ├── EntityManagerTest.php
    │   │   ├── EntityNotFoundExceptionTest.php
    │   │   ├── Event/
    │   │   │   └── OnClassMetadataNotFoundEventArgsTest.php
    │   │   ├── Functional/
    │   │   │   ├── AbstractFetchEagerTest.php
    │   │   │   ├── AbstractManyToManyAssociationTestCase.php
    │   │   │   ├── AdvancedAssociationTest.php
    │   │   │   ├── AdvancedDqlQueryTest.php
    │   │   │   ├── BasicFunctionalTest.php
    │   │   │   ├── CascadeRemoveOrderTest.php
    │   │   │   ├── ClassTableInheritanceSecondTest.php
    │   │   │   ├── ClassTableInheritanceTest.php
    │   │   │   ├── ClearEventTest.php
    │   │   │   ├── CompositeKeyRelationsTest.php
    │   │   │   ├── CompositePrimaryKeyTest.php
    │   │   │   ├── CompositePrimaryKeyWithAssociationsTest.php
    │   │   │   ├── CustomFunctionsTest.php
    │   │   │   ├── CustomIdObjectTypeTest.php
    │   │   │   ├── DatabaseDriverTest.php
    │   │   │   ├── DatabaseDriverTestCase.php
    │   │   │   ├── DefaultTimeExpressionTest.php
    │   │   │   ├── DefaultTimeExpressionXmlTest.php
    │   │   │   ├── DefaultValuesTest.php
    │   │   │   ├── DetachedEntityTest.php
    │   │   │   ├── EagerFetchCollectionTest.php
    │   │   │   ├── EagerFetchOneToManyWithCompositeKeyTest.php
    │   │   │   ├── EntityListenersTest.php
    │   │   │   ├── EntityRepositoryCriteriaTest.php
    │   │   │   ├── EntityRepositoryTest.php
    │   │   │   ├── EnumTest.php
    │   │   │   ├── ExtraLazyCollectionTest.php
    │   │   │   ├── FlushEventTest.php
    │   │   │   ├── GH7877Test.php
    │   │   │   ├── HydrationCacheTest.php
    │   │   │   ├── IdentityMapTest.php
    │   │   │   ├── IndexByAssociationTest.php
    │   │   │   ├── InsertableUpdatableTest.php
    │   │   │   ├── InvalidMappingDefinitionTest.php
    │   │   │   ├── JoinedTableCompositeKeyTest.php
    │   │   │   ├── LifecycleCallbackTest.php
    │   │   │   ├── Locking/
    │   │   │   │   ├── GearmanLockTest.php
    │   │   │   │   ├── LockAgentWorker.php
    │   │   │   │   ├── LockTest.php
    │   │   │   │   └── OptimisticTest.php
    │   │   │   ├── ManyToManyBasicAssociationTest.php
    │   │   │   ├── ManyToManyBidirectionalAssociationTest.php
    │   │   │   ├── ManyToManyEventTest.php
    │   │   │   ├── ManyToManySelfReferentialAssociationTest.php
    │   │   │   ├── ManyToManyUnidirectionalAssociationTest.php
    │   │   │   ├── MappedSuperclassTest.php
    │   │   │   ├── NativeQueryTest.php
    │   │   │   ├── NewOperatorTest.php
    │   │   │   ├── OneToManyBidirectionalAssociationTest.php
    │   │   │   ├── OneToManyOrphanRemovalTest.php
    │   │   │   ├── OneToManySelfReferentialAssociationTest.php
    │   │   │   ├── OneToManyUnidirectionalAssociationTest.php
    │   │   │   ├── OneToOneBidirectionalAssociationTest.php
    │   │   │   ├── OneToOneEagerLoadingTest.php
    │   │   │   ├── OneToOneInverseSideLoadAfterDqlQueryTest.php
    │   │   │   ├── OneToOneInverseSideWithAssociativeIdLoadAfterDqlQueryTest.php
    │   │   │   ├── OneToOneOrphanRemovalTest.php
    │   │   │   ├── OneToOneSelfReferentialAssociationTest.php
    │   │   │   ├── OneToOneSingleTableInheritanceTest.php
    │   │   │   ├── OneToOneUnidirectionalAssociationTest.php
    │   │   │   ├── OrderedCollectionTest.php
    │   │   │   ├── OrderedJoinedTableInheritanceCollectionTest.php
    │   │   │   ├── PaginationTest.php
    │   │   │   ├── ParserResultSerializationTest.php
    │   │   │   ├── ParserResults/
    │   │   │   │   └── single_select_2_17_0.txt
    │   │   │   ├── PersistentCollectionCriteriaTest.php
    │   │   │   ├── PersistentCollectionTest.php
    │   │   │   ├── PostFlushEventTest.php
    │   │   │   ├── PostLoadEventTest.php
    │   │   │   ├── PrePersistEventTest.php
    │   │   │   ├── PropertyHooksTest.php
    │   │   │   ├── ProxiesLikeEntitiesTest.php
    │   │   │   ├── QueryBuilderParenthesisTest.php
    │   │   │   ├── QueryCacheTest.php
    │   │   │   ├── QueryDqlFunctionTest.php
    │   │   │   ├── QueryIterableTest.php
    │   │   │   ├── QueryParameterTest.php
    │   │   │   ├── QueryTest.php
    │   │   │   ├── ReadOnlyTest.php
    │   │   │   ├── ReadonlyPropertiesTest.php
    │   │   │   ├── ReferenceProxyTest.php
    │   │   │   ├── ResultCacheTest.php
    │   │   │   ├── SQLFilterTest.php
    │   │   │   ├── SchemaTool/
    │   │   │   │   ├── CompanySchemaTest.php
    │   │   │   │   ├── DBAL483Test.php
    │   │   │   │   ├── DDC214Test.php
    │   │   │   │   ├── MySqlSchemaToolTest.php
    │   │   │   │   └── PostgreSqlSchemaToolTest.php
    │   │   │   ├── SchemaValidatorTest.php
    │   │   │   ├── SecondLevelCacheCompositePrimaryKeyTest.php
    │   │   │   ├── SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php
    │   │   │   ├── SecondLevelCacheConcurrentTest.php
    │   │   │   ├── SecondLevelCacheCountQueriesTest.php
    │   │   │   ├── SecondLevelCacheCriteriaTest.php
    │   │   │   ├── SecondLevelCacheExtraLazyCollectionTest.php
    │   │   │   ├── SecondLevelCacheFunctionalTestCase.php
    │   │   │   ├── SecondLevelCacheJoinTableInheritanceTest.php
    │   │   │   ├── SecondLevelCacheManyToManyTest.php
    │   │   │   ├── SecondLevelCacheManyToOneTest.php
    │   │   │   ├── SecondLevelCacheOneToManyTest.php
    │   │   │   ├── SecondLevelCacheOneToOneTest.php
    │   │   │   ├── SecondLevelCacheQueryCacheTest.php
    │   │   │   ├── SecondLevelCacheRepositoryTest.php
    │   │   │   ├── SecondLevelCacheSingleTableInheritanceTest.php
    │   │   │   ├── SecondLevelCacheTest.php
    │   │   │   ├── SequenceGeneratorTest.php
    │   │   │   ├── SingleTableCompositeKeyTest.php
    │   │   │   ├── SingleTableInheritanceTest.php
    │   │   │   ├── StandardEntityPersisterTest.php
    │   │   │   ├── Ticket/
    │   │   │   │   ├── DDC1040Test.php
    │   │   │   │   ├── DDC1041Test.php
    │   │   │   │   ├── DDC1043Test.php
    │   │   │   │   ├── DDC1080Test.php
    │   │   │   │   ├── DDC1113Test.php
    │   │   │   │   ├── DDC1129Test.php
    │   │   │   │   ├── DDC1163Test.php
    │   │   │   │   ├── DDC117Test.php
    │   │   │   │   ├── DDC1181Test.php
    │   │   │   │   ├── DDC1193Test.php
    │   │   │   │   ├── DDC1209Test.php
    │   │   │   │   ├── DDC1225Test.php
    │   │   │   │   ├── DDC1228Test.php
    │   │   │   │   ├── DDC1238Test.php
    │   │   │   │   ├── DDC1250Test.php
    │   │   │   │   ├── DDC1300Test.php
    │   │   │   │   ├── DDC1301Test.php
    │   │   │   │   ├── DDC1306Test.php
    │   │   │   │   ├── DDC1335Test.php
    │   │   │   │   ├── DDC1400Test.php
    │   │   │   │   ├── DDC142Test.php
    │   │   │   │   ├── DDC1430Test.php
    │   │   │   │   ├── DDC1436Test.php
    │   │   │   │   ├── DDC144Test.php
    │   │   │   │   ├── DDC1452Test.php
    │   │   │   │   ├── DDC1454Test.php
    │   │   │   │   ├── DDC1458Test.php
    │   │   │   │   ├── DDC1461Test.php
    │   │   │   │   ├── DDC1514Test.php
    │   │   │   │   ├── DDC1515Test.php
    │   │   │   │   ├── DDC1526Test.php
    │   │   │   │   ├── DDC1545Test.php
    │   │   │   │   ├── DDC1548Test.php
    │   │   │   │   ├── DDC1595Test.php
    │   │   │   │   ├── DDC163Test.php
    │   │   │   │   ├── DDC1643Test.php
    │   │   │   │   ├── DDC1654Test.php
    │   │   │   │   ├── DDC1655Test.php
    │   │   │   │   ├── DDC1666Test.php
    │   │   │   │   ├── DDC1685Test.php
    │   │   │   │   ├── DDC168Test.php
    │   │   │   │   ├── DDC1695Test.php
    │   │   │   │   ├── DDC1707Test.php
    │   │   │   │   ├── DDC1719Test.php
    │   │   │   │   ├── DDC1757Test.php
    │   │   │   │   ├── DDC1778Test.php
    │   │   │   │   ├── DDC1787Test.php
    │   │   │   │   ├── DDC1843Test.php
    │   │   │   │   ├── DDC1884Test.php
    │   │   │   │   ├── DDC1885Test.php
    │   │   │   │   ├── DDC1918Test.php
    │   │   │   │   ├── DDC1925Test.php
    │   │   │   │   ├── DDC192Test.php
    │   │   │   │   ├── DDC1995Test.php
    │   │   │   │   ├── DDC1998Test.php
    │   │   │   │   ├── DDC199Test.php
    │   │   │   │   ├── DDC2012Test.php
    │   │   │   │   ├── DDC2074Test.php
    │   │   │   │   ├── DDC2084Test.php
    │   │   │   │   ├── DDC2090Test.php
    │   │   │   │   ├── DDC2106Test.php
    │   │   │   │   ├── DDC211Test.php
    │   │   │   │   ├── DDC2138Test.php
    │   │   │   │   ├── DDC2175Test.php
    │   │   │   │   ├── DDC2182Test.php
    │   │   │   │   ├── DDC2214Test.php
    │   │   │   │   ├── DDC2224Test.php
    │   │   │   │   ├── DDC2252Test.php
    │   │   │   │   ├── DDC2306Test.php
    │   │   │   │   ├── DDC2346Test.php
    │   │   │   │   ├── DDC2350Test.php
    │   │   │   │   ├── DDC2359Test.php
    │   │   │   │   ├── DDC237Test.php
    │   │   │   │   ├── DDC2387Test.php
    │   │   │   │   ├── DDC2415Test.php
    │   │   │   │   ├── DDC2494Test.php
    │   │   │   │   ├── DDC2519Test.php
    │   │   │   │   ├── DDC2575Test.php
    │   │   │   │   ├── DDC2579Test.php
    │   │   │   │   ├── DDC258Test.php
    │   │   │   │   ├── DDC2602Test.php
    │   │   │   │   ├── DDC2655Test.php
    │   │   │   │   ├── DDC2660Test.php
    │   │   │   │   ├── DDC2692Test.php
    │   │   │   │   ├── DDC2759Test.php
    │   │   │   │   ├── DDC2775Test.php
    │   │   │   │   ├── DDC2780Test.php
    │   │   │   │   ├── DDC2790Test.php
    │   │   │   │   ├── DDC279Test.php
    │   │   │   │   ├── DDC2825Test.php
    │   │   │   │   ├── DDC2862Test.php
    │   │   │   │   ├── DDC2895Test.php
    │   │   │   │   ├── DDC2931Test.php
    │   │   │   │   ├── DDC2943Test.php
    │   │   │   │   ├── DDC2984Test.php
    │   │   │   │   ├── DDC2996Test.php
    │   │   │   │   ├── DDC3033Test.php
    │   │   │   │   ├── DDC3042Test.php
    │   │   │   │   ├── DDC3068Test.php
    │   │   │   │   ├── DDC309Test.php
    │   │   │   │   ├── DDC3103Test.php
    │   │   │   │   ├── DDC3123Test.php
    │   │   │   │   ├── DDC3160Test.php
    │   │   │   │   ├── DDC3170Test.php
    │   │   │   │   ├── DDC3192Test.php
    │   │   │   │   ├── DDC3223Test.php
    │   │   │   │   ├── DDC3300Test.php
    │   │   │   │   ├── DDC3303Test.php
    │   │   │   │   ├── DDC331Test.php
    │   │   │   │   ├── DDC3330Test.php
    │   │   │   │   ├── DDC3346Test.php
    │   │   │   │   ├── DDC345Test.php
    │   │   │   │   ├── DDC353Test.php
    │   │   │   │   ├── DDC3582Test.php
    │   │   │   │   ├── DDC3597Test.php
    │   │   │   │   ├── DDC3634Test.php
    │   │   │   │   ├── DDC3644Test.php
    │   │   │   │   ├── DDC3719Test.php
    │   │   │   │   ├── DDC371Test.php
    │   │   │   │   ├── DDC3785Test.php
    │   │   │   │   ├── DDC381Test.php
    │   │   │   │   ├── DDC3967Test.php
    │   │   │   │   ├── DDC4003Test.php
    │   │   │   │   ├── DDC4024Test.php
    │   │   │   │   ├── DDC422Test.php
    │   │   │   │   ├── DDC425Test.php
    │   │   │   │   ├── DDC440Test.php
    │   │   │   │   ├── DDC444Test.php
    │   │   │   │   ├── DDC448Test.php
    │   │   │   │   ├── DDC493Test.php
    │   │   │   │   ├── DDC512Test.php
    │   │   │   │   ├── DDC513Test.php
    │   │   │   │   ├── DDC522Test.php
    │   │   │   │   ├── DDC531Test.php
    │   │   │   │   ├── DDC5684Test.php
    │   │   │   │   ├── DDC588Test.php
    │   │   │   │   ├── DDC599Test.php
    │   │   │   │   ├── DDC618Test.php
    │   │   │   │   ├── DDC6303Test.php
    │   │   │   │   ├── DDC633Test.php
    │   │   │   │   ├── DDC6460Test.php
    │   │   │   │   ├── DDC6558Test.php
    │   │   │   │   ├── DDC656Test.php
    │   │   │   │   ├── DDC6573Test.php
    │   │   │   │   ├── DDC657Test.php
    │   │   │   │   ├── DDC698Test.php
    │   │   │   │   ├── DDC69Test.php
    │   │   │   │   ├── DDC719Test.php
    │   │   │   │   ├── DDC735Test.php
    │   │   │   │   ├── DDC736Test.php
    │   │   │   │   ├── DDC748Test.php
    │   │   │   │   ├── DDC767Test.php
    │   │   │   │   ├── DDC7969Test.php
    │   │   │   │   ├── DDC809Test.php
    │   │   │   │   ├── DDC812Test.php
    │   │   │   │   ├── DDC832Test.php
    │   │   │   │   ├── DDC837Test.php
    │   │   │   │   ├── DDC849Test.php
    │   │   │   │   ├── DDC881Test.php
    │   │   │   │   ├── DDC933Test.php
    │   │   │   │   ├── DDC949Test.php
    │   │   │   │   ├── DDC960Test.php
    │   │   │   │   ├── DDC992Test.php
    │   │   │   │   ├── GH10049/
    │   │   │   │   │   ├── GH10049Test.php
    │   │   │   │   │   ├── ReadOnlyPropertyInheritor.php
    │   │   │   │   │   └── ReadOnlyPropertyOwner.php
    │   │   │   │   ├── GH10132Test.php
    │   │   │   │   ├── GH10288Test.php
    │   │   │   │   ├── GH10334Test.php
    │   │   │   │   ├── GH10336Test.php
    │   │   │   │   ├── GH10348Test.php
    │   │   │   │   ├── GH10387Test.php
    │   │   │   │   ├── GH10450Test.php
    │   │   │   │   ├── GH10454Test.php
    │   │   │   │   ├── GH10462Test.php
    │   │   │   │   ├── GH10473Test.php
    │   │   │   │   ├── GH10531Test.php
    │   │   │   │   ├── GH10532Test.php
    │   │   │   │   ├── GH10566Test.php
    │   │   │   │   ├── GH10625Test.php
    │   │   │   │   ├── GH10661/
    │   │   │   │   │   ├── GH10661Test.php
    │   │   │   │   │   ├── InvalidChildEntity.php
    │   │   │   │   │   └── InvalidEntity.php
    │   │   │   │   ├── GH10747Test.php
    │   │   │   │   ├── GH10752Test.php
    │   │   │   │   ├── GH10808Test.php
    │   │   │   │   ├── GH10869Test.php
    │   │   │   │   ├── GH10880Test.php
    │   │   │   │   ├── GH10889Test.php
    │   │   │   │   ├── GH10912Test.php
    │   │   │   │   ├── GH10913Test.php
    │   │   │   │   ├── GH10927Test.php
    │   │   │   │   ├── GH11017/
    │   │   │   │   │   ├── GH11017Entity.php
    │   │   │   │   │   ├── GH11017Enum.php
    │   │   │   │   │   └── GH11017Test.php
    │   │   │   │   ├── GH11037/
    │   │   │   │   │   ├── EntityStatus.php
    │   │   │   │   │   ├── GH11037Test.php
    │   │   │   │   │   ├── IntEntityStatus.php
    │   │   │   │   │   ├── InvalidEntityWithTypedEnum.php
    │   │   │   │   │   ├── StringEntityStatus.php
    │   │   │   │   │   └── ValidEntityWithTypedEnum.php
    │   │   │   │   ├── GH11058Test.php
    │   │   │   │   ├── GH11072/
    │   │   │   │   │   ├── GH11072EntityAdvanced.php
    │   │   │   │   │   ├── GH11072EntityBasic.php
    │   │   │   │   │   └── GH11072Test.php
    │   │   │   │   ├── GH11112Test.php
    │   │   │   │   ├── GH11135Test.php
    │   │   │   │   ├── GH11149/
    │   │   │   │   │   ├── EagerProduct.php
    │   │   │   │   │   ├── EagerProductTranslation.php
    │   │   │   │   │   ├── GH11149Test.php
    │   │   │   │   │   └── Locale.php
    │   │   │   │   ├── GH11163Test.php
    │   │   │   │   ├── GH11199Test.php
    │   │   │   │   ├── GH11341Test.php
    │   │   │   │   ├── GH11386/
    │   │   │   │   │   ├── GH11386EntityCart.php
    │   │   │   │   │   ├── GH11386EntityCustomer.php
    │   │   │   │   │   ├── GH11386EnumType.php
    │   │   │   │   │   └── GH11386Test.php
    │   │   │   │   ├── GH11487Test.php
    │   │   │   │   ├── GH11500Test.php
    │   │   │   │   ├── GH11501Test.php
    │   │   │   │   ├── GH11524Test.php
    │   │   │   │   ├── GH11982Test.php
    │   │   │   │   ├── GH12166/
    │   │   │   │   │   ├── GH12166Test.php
    │   │   │   │   │   └── LazyEntityWithReadonlyId.php
    │   │   │   │   ├── GH12174Test.php
    │   │   │   │   ├── GH12183Test.php
    │   │   │   │   ├── GH12254Test.php
    │   │   │   │   ├── GH2947Test.php
    │   │   │   │   ├── GH5562Test.php
    │   │   │   │   ├── GH5742Test.php
    │   │   │   │   ├── GH5762Test.php
    │   │   │   │   ├── GH5804Test.php
    │   │   │   │   ├── GH5887Test.php
    │   │   │   │   ├── GH5988Test.php
    │   │   │   │   ├── GH5998Test.php
    │   │   │   │   ├── GH6029Test.php
    │   │   │   │   ├── GH6123Test.php
    │   │   │   │   ├── GH6141Test.php
    │   │   │   │   ├── GH6217Test.php
    │   │   │   │   ├── GH6362Test.php
    │   │   │   │   ├── GH6394Test.php
    │   │   │   │   ├── GH6402Test.php
    │   │   │   │   ├── GH6464Test.php
    │   │   │   │   ├── GH6499OneToManyRelationshipTest.php
    │   │   │   │   ├── GH6499OneToOneRelationshipTest.php
    │   │   │   │   ├── GH6499Test.php
    │   │   │   │   ├── GH6531Test.php
    │   │   │   │   ├── GH6682Test.php
    │   │   │   │   ├── GH6699Test.php
    │   │   │   │   ├── GH6740Test.php
    │   │   │   │   ├── GH6823Test.php
    │   │   │   │   ├── GH6937Test.php
    │   │   │   │   ├── GH7006Test.php
    │   │   │   │   ├── GH7012Test.php
    │   │   │   │   ├── GH7062Test.php
    │   │   │   │   ├── GH7067Test.php
    │   │   │   │   ├── GH7068Test.php
    │   │   │   │   ├── GH7079Test.php
    │   │   │   │   ├── GH7180Test.php
    │   │   │   │   ├── GH7259Test.php
    │   │   │   │   ├── GH7286Test.php
    │   │   │   │   ├── GH7366Test.php
    │   │   │   │   ├── GH7496WithToIterableTest.php
    │   │   │   │   ├── GH7505Test.php
    │   │   │   │   ├── GH7512Test.php
    │   │   │   │   ├── GH7629Test.php
    │   │   │   │   ├── GH7661Test.php
    │   │   │   │   ├── GH7684Test.php
    │   │   │   │   ├── GH7717Test.php
    │   │   │   │   ├── GH7735Test.php
    │   │   │   │   ├── GH7737Test.php
    │   │   │   │   ├── GH7761Test.php
    │   │   │   │   ├── GH7767Test.php
    │   │   │   │   ├── GH7820Test.php
    │   │   │   │   ├── GH7829Test.php
    │   │   │   │   ├── GH7836Test.php
    │   │   │   │   ├── GH7864Test.php
    │   │   │   │   ├── GH7869Test.php
    │   │   │   │   ├── GH7875Test.php
    │   │   │   │   ├── GH7941Test.php
    │   │   │   │   ├── GH8055Test.php
    │   │   │   │   ├── GH8061Test.php
    │   │   │   │   ├── GH8127Test.php
    │   │   │   │   ├── GH8217Test.php
    │   │   │   │   ├── GH8415Test.php
    │   │   │   │   ├── GH8415ToManyAssociationTest.php
    │   │   │   │   ├── GH8443Test.php
    │   │   │   │   ├── GH8499Test.php
    │   │   │   │   ├── GH8663Test.php
    │   │   │   │   ├── GH8914Test.php
    │   │   │   │   ├── GH9027Test.php
    │   │   │   │   ├── GH9109Test.php
    │   │   │   │   ├── GH9192Test.php
    │   │   │   │   ├── GH9230Test.php
    │   │   │   │   ├── GH9335Test.php
    │   │   │   │   ├── GH9467/
    │   │   │   │   │   ├── GH9467Test.php
    │   │   │   │   │   ├── JoinedInheritanceChild.php
    │   │   │   │   │   ├── JoinedInheritanceNonInsertableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceNonUpdatableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceNonWritableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceRoot.php
    │   │   │   │   │   └── JoinedInheritanceWritableColumn.php
    │   │   │   │   ├── GH9516Test.php
    │   │   │   │   ├── GH9579Test.php
    │   │   │   │   ├── GH9807Test.php
    │   │   │   │   ├── Issue5989Test.php
    │   │   │   │   ├── Issue9300Test.php
    │   │   │   │   ├── SwitchContextWithFilter/
    │   │   │   │   │   ├── AbstractTestCase.php
    │   │   │   │   │   ├── ChangeFiltersTest.php
    │   │   │   │   │   ├── Entity/
    │   │   │   │   │   │   ├── Insurance.php
    │   │   │   │   │   │   ├── Order.php
    │   │   │   │   │   │   ├── Patient.php
    │   │   │   │   │   │   ├── PatientInsurance.php
    │   │   │   │   │   │   ├── Practice.php
    │   │   │   │   │   │   ├── PrimaryPatInsurance.php
    │   │   │   │   │   │   ├── SecondaryPatInsurance.php
    │   │   │   │   │   │   └── User.php
    │   │   │   │   │   ├── SQLFilter/
    │   │   │   │   │   │   ├── CompanySQLFilter.php
    │   │   │   │   │   │   └── PracticeContextSQLFilter.php
    │   │   │   │   │   └── SwitchContextTest.php
    │   │   │   │   ├── SwitchContextWithFilterAndIndexedRelation/
    │   │   │   │   │   ├── Category.php
    │   │   │   │   │   ├── CategoryTypeSQLFilter.php
    │   │   │   │   │   ├── ChangeFiltersTest.php
    │   │   │   │   │   └── Company.php
    │   │   │   │   ├── Ticket2481Test.php
    │   │   │   │   ├── Ticket4646InstanceOfAbstractTest.php
    │   │   │   │   ├── Ticket4646InstanceOfMultiLevelTest.php
    │   │   │   │   ├── Ticket4646InstanceOfParametricTest.php
    │   │   │   │   ├── Ticket4646InstanceOfTest.php
    │   │   │   │   └── Ticket4646InstanceOfWithMultipleParametersTest.php
    │   │   │   ├── TypeTest.php
    │   │   │   ├── TypeValueSqlTest.php
    │   │   │   ├── UnitOfWorkLifecycleTest.php
    │   │   │   ├── ValueConversionType/
    │   │   │   │   ├── ManyToManyCompositeIdForeignKeyTest.php
    │   │   │   │   ├── ManyToManyCompositeIdTest.php
    │   │   │   │   ├── ManyToManyCriteriaMatchingTest.php
    │   │   │   │   ├── ManyToManyExtraLazyTest.php
    │   │   │   │   ├── ManyToManyTest.php
    │   │   │   │   ├── OneToManyCompositeIdForeignKeyTest.php
    │   │   │   │   ├── OneToManyCompositeIdTest.php
    │   │   │   │   ├── OneToManyCriteriaMatchingTest.php
    │   │   │   │   ├── OneToManyExtraLazyTest.php
    │   │   │   │   ├── OneToManyTest.php
    │   │   │   │   ├── OneToOneCompositeIdForeignKeyTest.php
    │   │   │   │   ├── OneToOneCompositeIdTest.php
    │   │   │   │   └── OneToOneTest.php
    │   │   │   ├── ValueObjectsTest.php
    │   │   │   └── VersionedOneToOneTest.php
    │   │   ├── Hydration/
    │   │   │   ├── AbstractHydratorTest.php
    │   │   │   ├── ArrayHydratorTest.php
    │   │   │   ├── CustomHydratorTest.php
    │   │   │   ├── HydrationTestCase.php
    │   │   │   ├── ObjectHydratorTest.php
    │   │   │   ├── ResultSetMappingTest.php
    │   │   │   ├── ScalarColumnHydratorTest.php
    │   │   │   ├── ScalarHydratorTest.php
    │   │   │   ├── SimpleObjectHydratorTest.php
    │   │   │   └── SingleScalarHydratorTest.php
    │   │   ├── Id/
    │   │   │   ├── AssignedGeneratorTest.php
    │   │   │   └── SequenceGeneratorTest.php
    │   │   ├── Internal/
    │   │   │   ├── HydrationCompleteHandlerTest.php
    │   │   │   ├── Node.php
    │   │   │   ├── StronglyConnectedComponentsTest.php
    │   │   │   ├── TopologicalSortTest.php
    │   │   │   └── UnitOfWork/
    │   │   │       └── InsertBatchTest.php
    │   │   ├── LazyCriteriaCollectionTest.php
    │   │   ├── Mapping/
    │   │   │   ├── AnsiQuoteStrategyTest.php
    │   │   │   ├── AssociationMappingTest.php
    │   │   │   ├── AttributeDriverTest.php
    │   │   │   ├── AttributeReaderTest.php
    │   │   │   ├── BasicInheritanceMappingTest.php
    │   │   │   ├── ClassMetadataBuilderTest.php
    │   │   │   ├── ClassMetadataFactoryTest.php
    │   │   │   ├── ClassMetadataLoadEventTest.php
    │   │   │   ├── ClassMetadataTest.php
    │   │   │   ├── DefaultQuoteStrategyTest.php
    │   │   │   ├── DiscriminatorColumnMappingTest.php
    │   │   │   ├── EmbeddedClassMappingTest.php
    │   │   │   ├── EntityListenerResolverTest.php
    │   │   │   ├── FieldBuilderTest.php
    │   │   │   ├── FieldMappingTest.php
    │   │   │   ├── Fixtures/
    │   │   │   │   └── AttributeEntityWithNestedJoinColumns.php
    │   │   │   ├── InverseSideMappingTest.php
    │   │   │   ├── JoinColumnMappingTest.php
    │   │   │   ├── JoinTableMappingTest.php
    │   │   │   ├── ManyToManyOwningSideMappingTest.php
    │   │   │   ├── ManyToOneAssociationMappingTest.php
    │   │   │   ├── MappingDriverTestCase.php
    │   │   │   ├── NamingStrategy/
    │   │   │   │   ├── CustomPascalNamingStrategy.php
    │   │   │   │   └── JoinColumnClassNamingStrategy.php
    │   │   │   ├── NamingStrategyTest.php
    │   │   │   ├── OneToOneOwningSideMappingTest.php
    │   │   │   ├── OwningSideMappingTest.php
    │   │   │   ├── PropertyAccessors/
    │   │   │   │   ├── EnumPropertyAccessorTest.php
    │   │   │   │   ├── ObjectCastPropertyAccessorTest.php
    │   │   │   │   ├── RawValuePropertyAccessorTest.php
    │   │   │   │   ├── ReadOnlyAccessorTest.php
    │   │   │   │   └── TypedNoDefaultPropertyAccessorTest.php
    │   │   │   ├── QuoteStrategyTest.php
    │   │   │   ├── ReflectionEmbeddedPropertyTest.php
    │   │   │   ├── ReflectionReadonlyPropertyTest.php
    │   │   │   ├── StaticPHPMappingDriverTest.php
    │   │   │   ├── Symfony/
    │   │   │   │   ├── DriverTestCase.php
    │   │   │   │   └── XmlDriverTest.php
    │   │   │   ├── TableMappingTest.php
    │   │   │   ├── ToManyAssociationMappingTest.php
    │   │   │   ├── TypedEnumFieldMapperTest.php
    │   │   │   ├── TypedFieldMapper/
    │   │   │   │   └── CustomIntAsStringTypedFieldMapper.php
    │   │   │   ├── TypedFieldMapperTest.php
    │   │   │   ├── XmlMappingDriverTest.php
    │   │   │   ├── invalid_xml/
    │   │   │   │   └── Doctrine.Tests.Models.InvalidXml.dcm.xml
    │   │   │   ├── php/
    │   │   │   │   ├── Doctrine.Tests.Models.Enums.Card.php
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.php
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Insertable.php
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Updatable.php
    │   │   │   │   └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.php
    │   │   │   ├── xml/
    │   │   │   │   ├── CatNoId.dcm.xml
    │   │   │   │   ├── DDC2429Book.orm.xml
    │   │   │   │   ├── DDC2429Novel.orm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.CMS.CmsUser.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Cache.City.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFixContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyPerson.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Customer.CustomerType.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC117.DDC117Translation.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889Class.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Enums.Card.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.GH7141.GH7141Article.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.GH7316.GH7316Article.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Generic.BooleanModel.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Project.Project.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Project.ProjectInvalidMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTyped.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Insertable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Updatable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.ValueObjects.Name.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.ValueObjects.Person.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Functional.XmlLegacyTimeEntity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Functional.XmlTimeEntity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.Animal.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.BlogPost.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.BlogPostComment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.Comment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.ReservedWordInTableColumn.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectAttributes.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectIndex.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectUniqueConstraint.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserMissingAttributes.dcm.xml
    │   │   │   │   └── Doctrine.Tests.ORM.Mapping.XMLSLC.dcm.xml
    │   │   │   └── yaml/
    │   │   │       ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.yml
    │   │   │       └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.yml
    │   │   ├── ORMInvalidArgumentExceptionTest.php
    │   │   ├── ORMSetupTest.php
    │   │   ├── Performance/
    │   │   │   └── SecondLevelCacheTest.php
    │   │   ├── PersistentCollectionTest.php
    │   │   ├── Persisters/
    │   │   │   ├── BasicEntityPersisterCompositeTypeParametersTest.php
    │   │   │   ├── BasicEntityPersisterCompositeTypeSqlTest.php
    │   │   │   ├── BasicEntityPersisterTypeValueSqlTest.php
    │   │   │   ├── BinaryIdPersisterTest.php
    │   │   │   ├── Exception/
    │   │   │   │   └── UnrecognizedFieldTest.php
    │   │   │   └── ManyToManyPersisterTest.php
    │   │   ├── Proxy/
    │   │   │   └── ProxyFactoryTest.php
    │   │   ├── Query/
    │   │   │   ├── CustomTreeWalkersJoinTest.php
    │   │   │   ├── CustomTreeWalkersTest.php
    │   │   │   ├── DeleteSqlGenerationTest.php
    │   │   │   ├── ExprTest.php
    │   │   │   ├── FilterCollectionTest.php
    │   │   │   ├── LanguageRecognitionTest.php
    │   │   │   ├── LexerTest.php
    │   │   │   ├── NativeQueryTest.php
    │   │   │   ├── ParameterTypeInfererTest.php
    │   │   │   ├── ParserResultTest.php
    │   │   │   ├── ParserTest.php
    │   │   │   ├── QueryExpressionVisitorTest.php
    │   │   │   ├── QueryTest.php
    │   │   │   ├── SelectSqlGenerationTest.php
    │   │   │   ├── SqlExpressionVisitorTest.php
    │   │   │   ├── SqlWalkerTest.php
    │   │   │   └── UpdateSqlGenerationTest.php
    │   │   ├── QueryBuilderTest.php
    │   │   ├── Repository/
    │   │   │   └── DefaultRepositoryFactoryTest.php
    │   │   ├── Tools/
    │   │   │   ├── AttachEntityListenersListenerTest.php
    │   │   │   ├── Console/
    │   │   │   │   ├── Command/
    │   │   │   │   │   ├── ClearCacheCollectionRegionCommandTest.php
    │   │   │   │   │   ├── ClearCacheEntityRegionCommandTest.php
    │   │   │   │   │   ├── ClearCacheQueryRegionCommandTest.php
    │   │   │   │   │   ├── Debug/
    │   │   │   │   │   │   ├── DebugEntityListenersDoctrineCommandTest.php
    │   │   │   │   │   │   ├── DebugEventManagerDoctrineCommandTest.php
    │   │   │   │   │   │   └── Fixtures/
    │   │   │   │   │   │       ├── BarListener.php
    │   │   │   │   │   │       ├── BazListener.php
    │   │   │   │   │   │       └── FooListener.php
    │   │   │   │   │   ├── InfoCommandTest.php
    │   │   │   │   │   ├── MappingDescribeCommandTest.php
    │   │   │   │   │   ├── RunDqlCommandTest.php
    │   │   │   │   │   ├── SchemaTool/
    │   │   │   │   │   │   ├── CommandTestCase.php
    │   │   │   │   │   │   ├── CreateCommandTest.php
    │   │   │   │   │   │   ├── DropCommandTest.php
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       └── Keyboard.php
    │   │   │   │   │   └── ValidateSchemaCommandTest.php
    │   │   │   │   ├── ConsoleRunnerTest.php
    │   │   │   │   └── MetadataFilterTest.php
    │   │   │   ├── DebugTest.php
    │   │   │   ├── Pagination/
    │   │   │   │   ├── CountOutputWalkerTest.php
    │   │   │   │   ├── CountWalkerTest.php
    │   │   │   │   ├── LimitSubqueryOutputWalkerTest.php
    │   │   │   │   ├── LimitSubqueryWalkerTest.php
    │   │   │   │   ├── PaginationTestCase.php
    │   │   │   │   ├── PaginatorTest.php
    │   │   │   │   ├── RootTypeWalkerTest.php
    │   │   │   │   └── WhereInWalkerTest.php
    │   │   │   ├── ResolveTargetEntityListenerTest.php
    │   │   │   ├── SchemaToolTest.php
    │   │   │   ├── SchemaValidatorTest.php
    │   │   │   └── TestAsset/
    │   │   │       ├── ChildClass.php
    │   │   │       ├── ChildWithSameAttributesClass.php
    │   │   │       └── ParentClass.php
    │   │   ├── UnitOfWorkTest.php
    │   │   └── Utility/
    │   │       ├── HierarchyDiscriminatorResolverTest.php
    │   │       ├── IdentifierFlattenerEnumIdTest.php
    │   │       └── IdentifierFlattenerTest.php
    │   ├── OrmFunctionalTestCase.php
    │   ├── OrmTestCase.php
    │   ├── Proxy/
    │   │   └── AutoloaderTest.php
    │   ├── TestInit.php
    │   └── TestUtil.php
    └── dbproperties.xml.dev

================================================
FILE CONTENTS
================================================

================================================
FILE: .doctrine-project.json
================================================
{
    "active": true,
    "name": "Object Relational Mapper",
    "shortName": "ORM",
    "slug": "orm",
    "docsSlug": "doctrine-orm",
    "versions": [
        {
            "name": "4.0",
            "branchName": "4.0.x",
            "slug": "latest",
            "upcoming": true
        },
        {
            "name": "3.7",
            "branchName": "3.7.x",
            "slug": "3.7",
            "upcoming": true
        },
        {
            "name": "3.6",
            "branchName": "3.6.x",
            "slug": "3.6",
            "current": true
        },
        {
            "name": "2.21",
            "branchName": "2.21.x",
            "slug": "2.21",
            "upcoming": true
        },
        {
            "name": "2.20",
            "branchName": "2.20.x",
            "slug": "2.20",
            "maintained": true
        },
        {
            "name": "2.19",
            "slug": "2.19",
            "maintained": false
        },
        {
            "name": "2.18",
            "slug": "2.18",
            "maintained": false
        },
        {
            "name": "2.17",
            "slug": "2.17",
            "maintained": false
        },
        {
            "name": "2.16",
            "slug": "2.16",
            "maintained": false
        },
        {
            "name": "2.15",
            "slug": "2.15",
            "maintained": false
        },
        {
            "name": "2.14",
            "slug": "2.14",
            "maintained": false
        }
    ]
}


================================================
FILE: .gitattributes
================================================
/.github export-ignore
/ci export-ignore
/docs export-ignore
/tests export-ignore
/tools export-ignore
.doctrine-project.json export-ignore
.gitattributes export-ignore
.gitignore export-ignore
build.properties export-ignore
build.properties.dev export-ignore
build.xml export-ignore
CONTRIBUTING.md export-ignore
phpunit.xml.dist export-ignore
phpcs.xml.dist export-ignore
phpbench.json export-ignore
phpstan.neon export-ignore
phpstan-baseline.neon export-ignore
phpstan-dbal3.neon export-ignore
phpstan-params.neon export-ignore
phpstan-persistence2.neon export-ignore


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/Failing_Test.md
================================================
---
name: 🐞 Failing Test
about: You found a bug and have a failing Unit or Functional test? 🔨
---

### Failing Test

<!-- Fill in the relevant information below to help triage your issue. -->

|    Q        |   A
|------------ | ------
| BC Break    | yes/no
| Version     | x.y.z


#### Summary

<!-- Provide a summary of the failing scenario. -->



================================================
FILE: .github/PULL_REQUEST_TEMPLATE/Improvement.md
================================================
---
name: ⚙ Improvement
about: You have some improvement to make Doctrine better? 🎁
---

### Improvement

<!-- Fill in the relevant information below to help triage your issue. -->

|    Q        |   A
|------------ | ------
| New Feature | yes
| RFC         | yes/no
| BC Break    | yes/no

#### Summary

<!-- Provide a summary of the improvement you are submitting. -->


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/New_Feature.md
================================================
---
name: 🎉 New Feature
about: You have implemented some neat idea that you want to make part of Doctrine? 🎩
---

<!--
Thank you for submitting new feature!
Pick the target branch based according to these criteria:
  * submitting a bugfix: target the lowest active stable branch: 2.9.x
  * submitting a new feature: target the next minor branch: 2.10.x
  * submitting a BC-breaking change: target the next major branch: 3.0.x
-->

### New Feature

<!-- Fill in the relevant information below to help triage your issue. -->

|    Q        |   A
|------------ | ------
| New Feature | yes
| RFC         | yes/no
| BC Break    | yes/no

#### Summary

<!-- Provide a summary of the feature you have implemented. -->


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    labels:
      - "CI"
    target-branch: "2.20.x"


================================================
FILE: .github/workflows/coding-standards.yml
================================================
name: "Coding Standards"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - .github/workflows/coding-standards.yml
      - bin/**
      - composer.*
      - src/**
      - phpcs.xml.dist
      - tests/**
  push:
    branches:
      - "*.x"
    paths:
      - .github/workflows/coding-standards.yml
      - bin/**
      - composer.*
      - src/**
      - phpcs.xml.dist
      - tests/**

jobs:
  coding-standards:
    uses: "doctrine/.github/.github/workflows/coding-standards.yml@13.1.0"


================================================
FILE: .github/workflows/composer-lint.yml
================================================
name: "Composer Lint"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - ".github/workflows/composer-lint.yml"
      - "composer.json"
  push:
    branches:
      - "*.x"
    paths:
      - ".github/workflows/composer-lint.yml"
      - "composer.json"

jobs:
  composer-lint:
    name: "Composer Lint"
    uses: "doctrine/.github/.github/workflows/composer-lint.yml@13.1.0"


================================================
FILE: .github/workflows/continuous-integration.yml
================================================
name: "CI: PHPUnit"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - .github/workflows/continuous-integration.yml
      - ci/**
      - composer.*
      - src/**
      - tests/**
  push:
    branches:
      - "*.x"
    paths:
      - .github/workflows/continuous-integration.yml
      - ci/**
      - composer.*
      - src/**
      - tests/**

env:
  fail-fast: true

jobs:
  phpunit-smoke-check:
    name: >
      SQLite -
      ${{ format('PHP {0} - DBAL {1} - ext. {2} - proxy {3}',
        matrix.php-version || 'Ø',
        matrix.dbal-version || 'Ø',
        matrix.extension || 'Ø',
        matrix.proxy || 'Ø'
      ) }}
    runs-on: "ubuntu-22.04"

    strategy:
      matrix:
        php-version:
          - "8.1"
          - "8.2"
          - "8.3"
          - "8.4"
          - "8.5"
        dbal-version:
          - "default"
          - "3.7"
        extension:
          - "sqlite3"
          - "pdo_sqlite"
        deps:
          - "highest"
        stability:
          - "stable"
        native_lazy:
          - "0"
        include:
          - php-version: "8.2"
            dbal-version: "4@dev"
            extension: "pdo_sqlite"
            stability: "stable"
            native_lazy: "0"
          - php-version: "8.2"
            dbal-version: "4@dev"
            extension: "sqlite3"
            stability: "stable"
            native_lazy: "0"
          - php-version: "8.1"
            dbal-version: "default"
            deps: "lowest"
            extension: "pdo_sqlite"
            stability: "stable"
            native_lazy: "0"
          - php-version: "8.4"
            dbal-version: "default"
            deps: "highest"
            extension: "pdo_sqlite"
            stability: "stable"
            native_lazy: "1"
          - php-version: "8.4"
            dbal-version: "default"
            deps: "highest"
            extension: "sqlite3"
            stability: "dev"
            native_lazy: "1"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          php-version: "${{ matrix.php-version }}"
          extensions: "apcu, pdo, ${{ matrix.extension }}"
          coverage: "pcov"
          ini-values: "zend.assertions=1, apc.enable_cli=1"

      - name: "Allow dev dependencies"
        run: |
          composer config minimum-stability dev
          composer remove --no-update --dev phpbench/phpbench phpdocumentor/guides-cli
          composer require --no-update symfony/console:^8 symfony/var-exporter:^8 doctrine/dbal:^4.4
          composer require --dev --no-update symfony/cache:^8
        if: "${{ matrix.stability == 'dev' }}"

      - name: "Require specific DBAL version"
        run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
        if: "${{ matrix.dbal-version != 'default' }}"

      - name: "Downgrade VarExporter"
        run: 'composer require --no-update "symfony/var-exporter:^6.4 || ^7.4"'
        if: "${{ matrix.native_lazy == '0' }}"

      - name: "Install dependencies with Composer"
        uses: "ramsey/composer-install@v3"
        with:
          composer-options: "--ignore-platform-req=php+"
          dependency-versions: "${{ matrix.deps }}"

      - name: "Run PHPUnit"
        run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage-no-cache.xml"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 0
            ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}

      - name: "Run PHPUnit with Second Level Cache and PHPUnit 10"
        run: |
          vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
            --exclude-group=performance,non-cacheable,locking_functional \
            --coverage-clover=coverage-cache.xml
        if: "${{ matrix.php-version == '8.1' }}"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 1
            ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}

      - name: "Run PHPUnit with Second Level Cache and PHPUnit 11+"
        run: |
          vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
            --exclude-group=performance \
            --exclude-group=non-cacheable \
            --exclude-group=locking_functional \
            --coverage-clover=coverage-cache.xml
        if: "${{ matrix.php-version != '8.1' }}"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 1
            ENABLE_NATIVE_LAZY_OBJECTS: ${{ matrix.native_lazy }}

      - name: "Upload coverage file"
        uses: "actions/upload-artifact@v7"
        with:
          name: "phpunit-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-${{ matrix.deps }}-${{ matrix.stability }}-${{ matrix.native_lazy }}-coverage"
          path: "coverage*.xml"


  phpunit-deprecations:
    name: "PHPUnit (fail on deprecations)"
    runs-on: "ubuntu-24.04"

    steps:
      -   name: "Checkout"
          uses: "actions/checkout@v5"
          with:
            fetch-depth: 2

      -   name: "Install PHP"
          uses: "shivammathur/setup-php@v2"
          with:
            php-version: "8.5"
            extensions: "apcu, pdo, sqlite3"
            coverage: "pcov"
            ini-values: "zend.assertions=1, apc.enable_cli=1"

      -   name: "Allow dev dependencies"
          run: composer config minimum-stability dev

      -   name: "Install dependencies with Composer"
          uses: "ramsey/composer-install@v3"
          with:
            composer-options: "--ignore-platform-req=php+"
            dependency-versions: "highest"

      -   name: "Run PHPUnit"
          run: "vendor/bin/phpunit -c ci/github/phpunit/sqlite3.xml --fail-on-deprecation"
          env:
            ENABLE_SECOND_LEVEL_CACHE: 0
            ENABLE_NATIVE_LAZY_OBJECTS: 1


  phpunit-postgres:
    name: >
      ${{ format('PostgreSQL {0} - PHP {1} - DBAL {2} - ext. {3}',
        matrix.postgres-version || 'Ø',
        matrix.php-version || 'Ø',
        matrix.dbal-version || 'Ø',
        matrix.extension || 'Ø'
      ) }}
    runs-on: "ubuntu-22.04"
    needs: "phpunit-smoke-check"

    strategy:
      matrix:
        php-version:
          - "8.2"
          - "8.3"
          - "8.4"
          - "8.5"
        dbal-version:
          - "default"
          - "3.7"
        postgres-version:
          - "17"
        extension:
          - pdo_pgsql
          - pgsql
        include:
          - php-version: "8.2"
            dbal-version: "4@dev"
            postgres-version: "14"
            extension: pdo_pgsql
          - php-version: "8.2"
            dbal-version: "3.7"
            postgres-version: "9.6"
            extension: pdo_pgsql

    services:
      postgres:
        image: "postgres:${{ matrix.postgres-version }}"
        env:
          POSTGRES_PASSWORD: "postgres"

        options: >-
          --health-cmd "pg_isready"

        ports:
          - "5432:5432"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          php-version: "${{ matrix.php-version }}"
          extensions: "pgsql pdo_pgsql"
          coverage: "pcov"
          ini-values: "zend.assertions=1, apc.enable_cli=1"

      - name: "Require specific DBAL version"
        run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
        if: "${{ matrix.dbal-version != 'default' }}"

      - name: "Install dependencies with Composer"
        uses: "ramsey/composer-install@v3"
        with:
          composer-options: "--ignore-platform-req=php+"

      - name: "Run PHPUnit"
        run: "vendor/bin/phpunit -c ci/github/phpunit/pdo_pgsql.xml --coverage-clover=coverage.xml"

      - name: "Upload coverage file"
        uses: "actions/upload-artifact@v7"
        with:
          name: "${{ github.job }}-${{ matrix.postgres-version }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-${{ matrix.extension }}-coverage"
          path: "coverage.xml"


  phpunit-mariadb:
    name: >
      ${{ format('MariaDB {0} - PHP {1} - DBAL {2} - ext. {3}',
        matrix.mariadb-version || 'Ø',
        matrix.php-version || 'Ø',
        matrix.dbal-version || 'Ø',
        matrix.extension || 'Ø'
      ) }}
    runs-on: "ubuntu-22.04"
    needs: "phpunit-smoke-check"

    strategy:
      matrix:
        php-version:
          - "8.2"
          - "8.3"
          - "8.4"
          - "8.5"
        dbal-version:
          - "default"
          - "3.7"
          - "4@dev"
        mariadb-version:
          - "11.4"
        extension:
          - "mysqli"
          - "pdo_mysql"

    services:
      mariadb:
        image: "mariadb:${{ matrix.mariadb-version }}"
        env:
          MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: yes
          MARIADB_DATABASE: "doctrine_tests"

        options: >-
          --health-cmd "healthcheck.sh --connect --innodb_initialized"

        ports:
          - "3306:3306"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Require specific DBAL version"
        run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
        if: "${{ matrix.dbal-version != 'default' }}"

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          php-version: "${{ matrix.php-version }}"
          coverage: "pcov"
          ini-values: "zend.assertions=1, apc.enable_cli=1"
          extensions: "${{ matrix.extension }}"

      - name: "Install dependencies with Composer"
        uses: "ramsey/composer-install@v3"
        with:
          composer-options: "--ignore-platform-req=php+"

      - name: "Run PHPUnit"
        run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage.xml"

      - name: "Upload coverage file"
        uses: "actions/upload-artifact@v7"
        with:
          name: "${{ github.job }}-${{ matrix.mariadb-version }}-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-coverage"
          path: "coverage.xml"


  phpunit-mysql:
    name: >
      ${{ format('MySQL {0} - PHP {1} - DBAL {2} - ext. {3}',
        matrix.mysql-version || 'Ø',
        matrix.php-version || 'Ø',
        matrix.dbal-version || 'Ø',
        matrix.extension || 'Ø'
      ) }}
    runs-on: "ubuntu-22.04"
    needs: "phpunit-smoke-check"

    strategy:
      matrix:
        php-version:
          - "8.2"
          - "8.3"
          - "8.4"
          - "8.5"
        dbal-version:
          - "default"
          - "3.7"
        mysql-version:
          - "5.7"
          - "8.0"
        extension:
          - "mysqli"
          - "pdo_mysql"
        include:
          - php-version: "8.2"
            dbal-version: "4@dev"
            mysql-version: "8.0"
            extension: "mysqli"
          - php-version: "8.2"
            dbal-version: "4@dev"
            mysql-version: "8.0"
            extension: "pdo_mysql"

    services:
      mysql:
        image: "mysql:${{ matrix.mysql-version }}"

        options: >-
          --health-cmd "mysqladmin ping --silent"
          -e MYSQL_ALLOW_EMPTY_PASSWORD=yes
          -e MYSQL_DATABASE=doctrine_tests

        ports:
          - "3306:3306"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          php-version: "${{ matrix.php-version }}"
          coverage: "pcov"
          ini-values: "zend.assertions=1, apc.enable_cli=1"
          extensions: "${{ matrix.extension }}"

      - name: "Require specific DBAL version"
        run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
        if: "${{ matrix.dbal-version != 'default' }}"

      - name: "Install dependencies with Composer"
        uses: "ramsey/composer-install@v3"
        with:
          composer-options: "--ignore-platform-req=php+"

      - name: "Run PHPUnit"
        run: "vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml --coverage-clover=coverage-no-cache.xml"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 0

      - name: "Run PHPUnit with Second Level Cache and PHPUnit 10"
        run: |
          vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
            --exclude-group=performance,non-cacheable,locking_functional \
            --coverage-clover=coverage-no-cache.xml"
        if: "${{ matrix.php-version == '8.1' }}"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 1
      - name: "Run PHPUnit with Second Level Cache and PHPUnit 11+"
        run: |
          vendor/bin/phpunit -c ci/github/phpunit/${{ matrix.extension }}.xml \
            --exclude-group=performance \
            --exclude-group=non-cacheable \
            --exclude-group=locking_functional \
            --coverage-clover=coverage-no-cache.xml
        if: "${{ matrix.php-version != '8.1' }}"
        env:
            ENABLE_SECOND_LEVEL_CACHE: 1

      - name: "Upload coverage files"
        uses: "actions/upload-artifact@v7"
        with:
          name: "${{ github.job }}-${{ matrix.mysql-version }}-${{ matrix.extension }}-${{ matrix.php-version }}-${{ matrix.dbal-version }}-coverage"
          path: "coverage*.xml"

  upload_coverage:
    name: "Upload coverage to Codecov"
    runs-on: "ubuntu-22.04"
    # Only run on PRs from forks
    if: "github.event.pull_request.head.repo.full_name != github.repository"
    needs:
      - "phpunit-smoke-check"
      - "phpunit-postgres"
      - "phpunit-mariadb"
      - "phpunit-mysql"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Download coverage files"
        uses: "actions/download-artifact@v8"
        with:
          path: "reports"

      - name: "Upload to Codecov"
        uses: "codecov/codecov-action@v5"
        with:
          directory: reports
        env:
          CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"


================================================
FILE: .github/workflows/documentation.yml
================================================
name: "Documentation"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - ".github/workflows/documentation.yml"
      - "docs/**"
  push:
    branches:
      - "*.x"
    paths:
      - ".github/workflows/documentation.yml"
      - "docs/**"

jobs:
  documentation:
    name: "Documentation"
    uses: "doctrine/.github/.github/workflows/documentation.yml@13.1.0"


================================================
FILE: .github/workflows/phpbench.yml
================================================

name: "Performance benchmark"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - .github/workflows/phpbench.yml
      - composer.*
      - src/**
      - phpbench.json
      - tests/**
  push:
    branches:
      - "*.x"
    paths:
      - .github/workflows/phpbench.yml
      - composer.*
      - src/**
      - phpbench.json
      - tests/**

env:
  fail-fast: true

jobs:
  phpbench:
    name: "PHPBench"
    runs-on: "ubuntu-22.04"

    strategy:
      matrix:
        php-version:
          - "8.1"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v6"
        with:
          fetch-depth: 2

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          php-version: "${{ matrix.php-version }}"
          coverage: "pcov"
          ini-values: "zend.assertions=1, apc.enable_cli=1"

      - name: "Install dependencies with Composer"
        uses: "ramsey/composer-install@v3"

      - name: "Run PHPBench"
        run: "vendor/bin/phpbench run --report=default"


================================================
FILE: .github/workflows/release-on-milestone-closed.yml
================================================
name: "Automatic Releases"

on:
  milestone:
    types:
      - "closed"

jobs:
  release:
    uses: "doctrine/.github/.github/workflows/release-on-milestone-closed.yml@13.1.0"
    secrets:
      GIT_AUTHOR_EMAIL: ${{ secrets.GIT_AUTHOR_EMAIL }}
      GIT_AUTHOR_NAME: ${{ secrets.GIT_AUTHOR_NAME }}
      ORGANIZATION_ADMIN_TOKEN: ${{ secrets.ORGANIZATION_ADMIN_TOKEN }}
      SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }}


================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Close stale pull requests'
on:
  schedule:
    - cron: '0 3 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v9
        with:
          stale-pr-message: >
            There hasn't been any activity on this pull request in the past 90 days, so
            it has been marked as stale and it will be closed automatically if no
            further activity occurs in the next 7 days.

            If you want to continue working on it, please leave a comment.

          close-pr-message: >
            This pull request was closed due to inactivity.

          days-before-stale:    -1
          days-before-pr-stale: 90
          days-before-pr-close: 7


================================================
FILE: .github/workflows/static-analysis.yml
================================================
name: "Static Analysis"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - .github/workflows/static-analysis.yml
      - composer.*
      - src/**
      - phpstan*
      - tests/StaticAnalysis/**
  push:
    branches:
      - "*.x"
    paths:
      - .github/workflows/static-analysis.yml
      - composer.*
      - src/**
      - phpstan*
      - tests/StaticAnalysis/**

jobs:
  static-analysis-phpstan:
    name: Static Analysis with PHPStan
    runs-on: ubuntu-22.04

    strategy:
      matrix:
        include:
        - dbal-version: default
          config: phpstan.neon
        - dbal-version: 3.8.2
          config: phpstan-dbal3.neon

    steps:
      - name: "Checkout code"
        uses: "actions/checkout@v6"

      - name: Install PHP
        uses: shivammathur/setup-php@v2
        with:
          coverage: none
          php-version: "8.4"
          tools: cs2pr

      - name: Require specific DBAL version
        run: "composer require doctrine/dbal ^${{ matrix.dbal-version }} --no-update"
        if: "${{ matrix.dbal-version != 'default' }}"


      - name: Install dependencies with Composer
        uses: ramsey/composer-install@v2

      - name: Run static analysis with phpstan/phpstan
        run: "vendor/bin/phpstan analyse -c ${{ matrix.config }} --error-format=checkstyle | cs2pr"


================================================
FILE: .github/workflows/website-schema.yml
================================================

name: "Website config validation"

on:
  pull_request:
    branches:
      - "*.x"
    paths:
      - ".doctrine-project.json"
      - ".github/workflows/website-schema.yml"
  push:
    branches:
      - "*.x"
    paths:
      - ".doctrine-project.json"
      - ".github/workflows/website-schema.yml"

jobs:
  json-validate:
    name: "Validate JSON schema"
    uses: "doctrine/.github/.github/workflows/website-schema.yml@7.1.0"


================================================
FILE: .gitignore
================================================
build/
logs/
reports/
dist/
download/
/.settings/
.buildpath
.project
.idea
*.iml
vendor/
/tests/Doctrine/Performance/history.db
/.phpcs-cache
composer.lock
.phpunit.cache
.phpunit.result.cache
/*.phpunit.xml


================================================
FILE: CONTRIBUTING.md
================================================
# Contribute to Doctrine

Thank you for contributing to Doctrine!

Before we can merge your Pull-Request here are some guidelines that you need to follow.
These guidelines exist not to annoy you, but to keep the code base clean,
unified and future proof.

Doctrine has [general contributing guidelines][contributor workflow], make
sure you follow them.

[contributor workflow]: https://www.doctrine-project.org/contribute/index.html

## Coding Standard

This project follows [`doctrine/coding-standard`][coding standard homepage].
You may fix many some of the issues with `vendor/bin/phpcbf`.

[coding standard homepage]: https://github.com/doctrine/coding-standard

## Unit-Tests

Please try to add a test for your pull-request.

* If you want to fix a bug or provide a reproduce case, create a test file in
  ``tests/Tests/ORM/Functional/Ticket`` with the name of the ticket,
  ``DDC1234Test.php`` for example.
* If you want to contribute new functionality add unit- or functional tests
  depending on the scope of the feature.

You can run the unit-tests by calling ``vendor/bin/phpunit`` from the root of the project.
It will run all the tests with an in memory SQLite database.

In order to do that, you will need a fresh copy of the ORM, and you
will have to run a composer installation in the project:

```sh
git clone git@github.com:doctrine/orm.git
cd orm
composer install
```

You will also need to enable the PHP extension that provides the SQLite driver
for PDO: `pdo_sqlite`. How to do so depends on your system, but checking that it
is enabled can universally be done with `php -m`: that command should list the
extension.

To run the testsuite against another database, copy the ``phpunit.xml.dist``
to for example ``mysql.phpunit.xml`` and edit the parameters. You can
take a look at the ``ci/github/phpunit`` directory for some examples. Then run:

    vendor/bin/phpunit -c mysql.phpunit.xml

If you do not provide these parameters, the test suite will use an in-memory
sqlite database.

Tips for creating unit tests:

1. If you put a test into the `Ticket` namespace as described above, put the testcase and all entities into the same class.
   See `https://github.com/doctrine/orm/tree/3.0.x/tests/Tests/ORM/Functional/Ticket/DDC2306Test.php` for an
   example.

## Getting merged

Please allow us time to review your pull requests. We will give our best to review
everything as fast as possible, but cannot always live up to our own expectations.

Thank you very much again for your contribution!



================================================
FILE: LICENSE
================================================
Copyright (c) Doctrine Project

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
|                      [4.0.x][4.0]                      |                      [3.7.x][3.7]                      |                      [3.6.x][3.6]                      |                      [2.21.x][2.21]                      |                      [2.20.x][2.20]                      |
|:------------------------------------------------------:|:------------------------------------------------------:|:------------------------------------------------------:|:--------------------------------------------------------:|:--------------------------------------------------------:|
|       [![Build status][4.0 image]][4.0 workflow]       |       [![Build status][3.7 image]][3.7 workflow]       |       [![Build status][3.6 image]][3.6 workflow]       |       [![Build status][2.21 image]][2.21 workflow]       |       [![Build status][2.20 image]][2.20 workflow]       |
| [![Coverage Status][4.0 coverage image]][4.0 coverage] | [![Coverage Status][3.7 coverage image]][3.7 coverage] | [![Coverage Status][3.6 coverage image]][3.6 coverage] | [![Coverage Status][2.21 coverage image]][2.21 coverage] | [![Coverage Status][2.20 coverage image]][2.20 coverage] |

Doctrine ORM is an object-relational mapper for PHP 8.1+ that provides transparent persistence
for PHP objects. It sits on top of a powerful database abstraction layer (DBAL). One of its key features
is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL),
inspired by Hibernate's HQL. This provides developers with a powerful alternative to SQL that maintains flexibility
without requiring unnecessary code duplication.


## More resources:

* [Website](http://www.doctrine-project.org)
* [Documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/index.html)


  [4.0 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=4.0.x
  [4.0]: https://github.com/doctrine/orm/tree/4.0.x
  [4.0 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A4.0.x
  [4.0 coverage image]: https://codecov.io/gh/doctrine/orm/branch/4.0.x/graph/badge.svg
  [4.0 coverage]: https://codecov.io/gh/doctrine/orm/branch/4.0.x
  [3.7 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.7.x
  [3.7]: https://github.com/doctrine/orm/tree/3.7.x
  [3.7 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A3.7.x
  [3.7 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.7.x/graph/badge.svg
  [3.7 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.7.x
  [3.6 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.6.x
  [3.6]: https://github.com/doctrine/orm/tree/3.6.x
  [3.6 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A3.6.x
  [3.6 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.6.x/graph/badge.svg
  [3.6 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.6.x
  [2.21 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.21.x
  [2.21]: https://github.com/doctrine/orm/tree/2.21.x
  [2.21 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A2.21.x
  [2.21 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.21.x/graph/badge.svg
  [2.21 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.21.x
  [2.20 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.20.x
  [2.20]: https://github.com/doctrine/orm/tree/2.20.x
  [2.20 workflow]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml?query=branch%3A2.20.x
  [2.20 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.20.x/graph/badge.svg
  [2.20 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.20.x


================================================
FILE: SECURITY.md
================================================
Security
========

The Doctrine library is operating very close to your database and as such needs
to handle and make assumptions about SQL injection vulnerabilities.

It is vital that you understand how Doctrine approaches security, because
we cannot protect you from SQL injection.

Please read the documentation chapter on Security in Doctrine DBAL and ORM to
understand the assumptions we make.

- [DBAL Security Page](https://www.doctrine-project.org/projects/doctrine-dbal/en/stable/reference/security.html)
- [ORM Security Page](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/reference/security.html)

If you find a Security bug in Doctrine, please follow our
[Security reporting guidelines](https://www.doctrine-project.org/policies/security.html#reporting).


================================================
FILE: UPGRADE.md
================================================
Note about upgrading: Doctrine uses static and runtime mechanisms to raise
awareness about deprecated code.

- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or
  Static Analysis tools (like Psalm, phpstan)
- Use of our low-overhead runtime deprecation API, details:
  https://github.com/doctrine/deprecations/

# Upgrade to 3.x General Notes

We recommend you upgrade to DBAL 3 first before upgrading to ORM 3. See
the DBAL upgrade docs: https://github.com/doctrine/dbal/blob/3.10.x/UPGRADE.md

Rather than doing several major upgrades at once, we recommend you do the following:

- upgrade to DBAL 3
- deploy and monitor
- upgrade to ORM 3
- deploy and monitor
- upgrade to DBAL 4
- deploy and monitor

If you are using Symfony, the recommended minimal Doctrine Bundle version is 2.15
to run with ORM 3.

At this point, we recommend upgrading to PHP 8.4 first and then directly from
ORM 2.19 to 3.5 and up so that you can skip the lazy ghost proxy generation
and directly start using native lazy objects.

# Upgrade to 3.6

## Deprecate using string expression for default values in mappings

Using a string expression for default values in field mappings is deprecated.
Use `Doctrine\DBAL\Schema\DefaultExpression` instances instead.

Here is how to address this deprecation when mapping entities using PHP attributes:

```diff
 use DateTime;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentDate;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentTime;
+use Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp;
 use Doctrine\ORM\Mapping as ORM;

 #[ORM\Entity]
 final class TimeEntity
 {
     #[ORM\Id]
     #[ORM\Column]
     public int $id;

-    #[ORM\Column(options: ['default' => 'CURRENT_TIMESTAMP'], insertable: false, updatable: false)]
+    #[ORM\Column(options: ['default' => new CurrentTimestamp()], insertable: false, updatable: false)]
     public DateTime $createdAt;

-    #[ORM\Column(options: ['default' => 'CURRENT_TIME'], insertable: false, updatable: false)]
+    #[ORM\Column(options: ['default' => new CurrentTime()], insertable: false, updatable: false)]
     public DateTime $createdTime;

-    #[ORM\Column(options: ['default' => 'CURRENT_DATE'], insertable: false, updatable: false)]
+    #[ORM\Column(options: ['default' => new CurrentDate()], insertable: false, updatable: false)]
     public DateTime $createdDate;
 }
```

Here is how to do the same when mapping entities using XML:

```diff
 <?xml version="1.0" encoding="UTF-8"?>

 <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                           https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

     <entity name="Doctrine\Tests\ORM\Functional\XmlTimeEntity">
         <id name="id" type="integer" column="id">
             <generator strategy="AUTO"/>
         </id>

         <field name="createdAt" type="datetime" insertable="false" updatable="false">
             <options>
-                <option name="default">CURRENT_TIMESTAMP</option>
+                <option name="default">
+                    <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp"/>
+                </option>
             </options>
         </field>

         <field name="createdAtImmutable" type="datetime_immutable" insertable="false" updatable="false">
             <options>
-                <option name="default">CURRENT_TIMESTAMP</option>
+                <option name="default">
+                    <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTimestamp"/>
+                </option>
             </options>
         </field>

         <field name="createdTime" type="time" insertable="false" updatable="false">
             <options>
-                <option name="default">CURRENT_TIME</option>
+                <option name="default">
+                    <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentTime"/>
+                </option>
             </options>
         </field>
         <field name="createdDate" type="date" insertable="false" updatable="false">
             <options>
-                <option name="default">CURRENT_DATE</option>
+                <option name="default">
+                    <object class="Doctrine\DBAL\Schema\DefaultExpression\CurrentDate"/>
+                </option>
             </options>
         </field>
     </entity>
 </doctrine-mapping>
```


## Deprecate `FieldMapping::$default`

The `default` property of `Doctrine\ORM\Mapping\FieldMapping` is deprecated and
will be removed in 4.0. Instead, use `FieldMapping::$options['default']`.

## Deprecate specifying `nullable` on columns that end up being used in a primary key

Specifying `nullable` on join columns that are part of a primary key is
deprecated and will be an error in 4.0.

This can happen when using a join column mapping together with an id mapping,
or when using a join column mapping or an inverse join column mapping on a
many-to-many relationship.

```diff
 class User
 {
     #[ORM\Id]
     #[ORM\Column(type: 'integer')]
     private int $id;

     #[ORM\Id]
     #[ORM\ManyToOne(targetEntity: Family::class, inversedBy: 'users')]
-    #[ORM\JoinColumn(name: 'family_id', referencedColumnName: 'id', nullable: true)]
+    #[ORM\JoinColumn(name: 'family_id', referencedColumnName: 'id')]
     private ?Family $family;

     #[ORM\ManyToMany(targetEntity: Group::class)]
     #[ORM\JoinTable(name: 'user_group')]
-    #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: true)]
-    #[ORM\InverseJoinColumn(name: 'group_id', referencedColumnName: 'id', nullable: true)]
+    #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')]
+    #[ORM\InverseJoinColumn(name: 'group_id', referencedColumnName: 'id')]
     private Collection $groups;
 }
```

## Deprecate `Doctrine\ORM\QueryBuilder::add('join', ...)` with a list of join parts

Using `Doctrine\ORM\QueryBuilder::add('join', ...)` with a list of join parts
is deprecated in favor of using an associative array of join parts with the
root alias as key.

## Deprecate using the `WITH` keyword for arbitrary DQL joins

Using the `WITH` keyword to specify the condition for an arbitrary DQL join is
deprecated in favor of using the `ON` keyword (similar to the SQL syntax for
joins).
The `WITH` keyword is now meant to be used only for filtering conditions in
association joins.

# Upgrade to 3.5

See the General notes to upgrading to 3.x versions above.

## Deprecate not using native lazy objects on PHP 8.4+

Having native lazy objects disabled on PHP 8.4+ is deprecated and will not be
possible in 4.0.

You can enable them through configuration:

```php
$config->enableNativeLazyObjects(true);
```

As a consequence, methods, parameters and commands related to userland lazy
objects have been deprecated on PHP 8.4+:

- `Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand`
- `Doctrine\ORM\Configuration::getAutoGenerateProxyClasses()`
- `Doctrine\ORM\Configuration::getProxyDir()`
- `Doctrine\ORM\Configuration::getProxyNamespace()`
- `Doctrine\ORM\Configuration::setAutoGenerateProxyClasses()`
- `Doctrine\ORM\Configuration::setProxyDir()`
- `Doctrine\ORM\Configuration::setProxyNamespace()`
- Passing more than one argument to `Doctrine\ORM\Proxy\ProxyFactory::__construct()`

Additionally, some methods of ORMSetup have been deprecated in favor of a new
counterpart.

- `Doctrine\ORM\ORMSetup::createAttributeMetadataConfiguration()` is deprecated in favor of
  `Doctrine\ORM\ORMSetup::createAttributeMetadataConfig()`
- `Doctrine\ORM\ORMSetup::createXMLMetadataConfiguration()` is deprecated in favor of
  `Doctrine\ORM\ORMSetup::createXMLMetadataConfig()`
- `Doctrine\ORM\ORMSetup::createConfiguration()` is deprecated in favor of
  `Doctrine\ORM\ORMSetup::createConfig()`

## Deprecate methods for configuring no longer configurable features

Since 3.0, lazy ghosts are enabled unconditionally, and so is rejecting ID
collisions in the identity map.

As a consequence, the following methods are deprecated and will be removed in 4.0:
* `Doctrine\ORM\Configuration::setLazyGhostObjectEnabled()`
* `Doctrine\ORM\Configuration::isLazyGhostObjectEnabled()`
* `Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()`
* `Doctrine\ORM\Configuration::isRejectIdCollisionInIdentityMapEnabled()`

# Upgrade to 3.4.1

## BC BREAK: You can no longer use the `.*` notation to get all fields of an entity in a DTO

This feature was introduced in 3.4.0, and introduces several issues, so we
decide to remove it before it is used too widely.

# Upgrade to 3.4

See the General notes to upgrading to 3.x versions above.

## Discriminator Map class duplicates

Using the same class several times in a discriminator map is deprecated.
In 4.0, this will be an error.

## `Doctrine\ORM\Mapping\ClassMetadata::$reflFields` deprecated

To better support property hooks and lazy proxies in the future, `$reflFields` had to
be deprecated because we cannot use the PHP internal reflection API directly anymore.

The property was changed from an array to an object of type `LegacyReflectionFields`
that implements `ArrayAccess`.

Use the new `Doctrine\ORM\Mapping\PropertyAccessors\PropertyAccessor` API and access
through `Doctrine\ORM\Mapping\ClassMetadata::$propertyAccessors` instead.

Companion accessor methods are deprecated as well.

# Upgrade to 3.3

See the General notes to upgrading to 3.x versions above.

## Deprecate `DatabaseDriver`

The class `Doctrine\ORM\Mapping\Driver\DatabaseDriver` is deprecated without replacement.

## Add `Doctrine\ORM\Query\OutputWalker` interface, deprecate `Doctrine\ORM\Query\SqlWalker::getExecutor()`

Output walkers should implement the new `\Doctrine\ORM\Query\OutputWalker` interface and create
`Doctrine\ORM\Query\Exec\SqlFinalizer` instances instead of `Doctrine\ORM\Query\Exec\AbstractSqlExecutor`s.
The output walker must not base its workings on the query `firstResult`/`maxResult` values, so that the
`SqlFinalizer` can be kept in the query cache and used regardless of the actual `firstResult`/`maxResult` values.
Any operation dependent on `firstResult`/`maxResult` should take place within the `SqlFinalizer::createExecutor()`
method. Details can be found at https://github.com/doctrine/orm/pull/11188.


# Upgrade to 3.2

See the General notes to upgrading to 3.x versions above.

## Deprecate the `NotSupported` exception

The class `Doctrine\ORM\Exception\NotSupported` is deprecated without replacement.

## Deprecate remaining `Serializable` implementation

Relying on `SequenceGenerator` implementing the `Serializable` is deprecated
because that interface won't be implemented in ORM 4 anymore.

The following methods are deprecated:

* `SequenceGenerator::serialize()`
* `SequenceGenerator::unserialize()`

## `orm:schema-tool:update` option `--complete` is deprecated

That option behaves as a no-op, and is deprecated. It will be removed in 4.0.

## Deprecate properties `$indexes` and `$uniqueConstraints` of `Doctrine\ORM\Mapping\Table`

The properties `$indexes` and `$uniqueConstraints` have been deprecated since they had no effect at all.
The preferred way of defining indices and unique constraints is by
using the `\Doctrine\ORM\Mapping\UniqueConstraint` and `\Doctrine\ORM\Mapping\Index` attributes.

# Upgrade to 3.1

See the General notes to upgrading to 3.x versions above.

## Deprecate `Doctrine\ORM\Mapping\ReflectionEnumProperty`

This class is deprecated and will be removed in 4.0.
Instead, use `Doctrine\Persistence\Reflection\EnumReflectionProperty` from
`doctrine/persistence`.

## Deprecate passing null to `ClassMetadata::fullyQualifiedClassName()`

Passing `null` to `Doctrine\ORM\ClassMetadata::fullyQualifiedClassName()` is
deprecated and will no longer be possible in 4.0.

## Deprecate array access

Using array access on instances of the following classes is deprecated:

- `Doctrine\ORM\Mapping\DiscriminatorColumnMapping`
- `Doctrine\ORM\Mapping\EmbedClassMapping`
- `Doctrine\ORM\Mapping\FieldMapping`
- `Doctrine\ORM\Mapping\JoinColumnMapping`
- `Doctrine\ORM\Mapping\JoinTableMapping`

# Upgrade to 3.0

See the General notes to upgrading to 3.x versions above.

## BC BREAK: Calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association now throws an exception

Previously, calling
`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with
the owning side of an association returned `null`, which was undocumented, and
wrong according to the phpdoc of the parent method.

If you do not know whether you are on the owning or inverse side of an association,
you can use  `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()`
to find out.

## BC BREAK: `Doctrine\ORM\Proxy\Autoloader` no longer extends `Doctrine\Common\Proxy\Autoloader`

Make sure to use the former when writing a type declaration or an `instanceof` check.

## Minor BC BREAK: Changed order of arguments passed to `OneToOne`, `ManyToOne` and `Index` mapping PHP attributes

To keep PHP mapping attributes consistent, order of arguments passed to above attributes has been changed
so `$targetEntity` is a first argument now. This change affects only non-named arguments usage.

## BC BREAK: AUTO keyword for identity generation defaults to IDENTITY for PostgreSQL when using `doctrine/dbal` 4

When using the `AUTO` strategy to let Doctrine determine the identity generation mechanism for
an entity, and when using `doctrine/dbal` 4, PostgreSQL now uses `IDENTITY`
instead of `SEQUENCE` or `SERIAL`.

There are three ways to handle this change.

* If you want to upgrade your existing tables to identity columns, you will need to follow [migration to identity columns on PostgreSQL](https://www.doctrine-project.org/projects/doctrine-dbal/en/4.0/how-to/postgresql-identity-migration.html)
* If you want to keep using SQL sequences, you need to configure the ORM this way:
```php
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\Mapping\ClassMetadata;

assert($configuration instanceof Configuration);
$configuration->setIdentityGenerationPreferences([
    PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE,
]);
```
* You can change individual entities to use the `SEQUENCE` strategy instead of `AUTO`:
```php

diff --git a/src/Entity/Example.php b/src/Entity/Example.php
index 28be8df378..3b7d61bda6 100644
--- a/src/Entity/Example.php
+++ b/src/Entity/Example.php
@@ -38,7 +38,7 @@ class Example

     #[ORM\Id]
     #[ORM\Column(type: 'integer')]
-    #[ORM\GeneratedValue(strategy: 'AUTO')]
+    #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
     private int $id;

     #[Assert\Length(max: 255)]
```
The later two options require a small database migration that will remove the default
expression fetching the next value from the sequence. It's not strictly necessary to
do this migration because the code will work anyway. A benefit of this approach is
that you can just make and roll out the code changes first and then migrate the database later.

## BC BREAK: Throw exceptions when using illegal attributes on Embeddable

There are only a few attributes allowed on an embeddable such as `#[Column]` or
`#[Embedded]`. Previously all others that target entity classes where ignored,
now they throw an exception.

## BC BREAK: Partial objects are removed

WARNING: This was relaxed in ORM 3.2 when partial was re-allowed for array-hydration.

- The `PARTIAL` keyword in DQL no longer exists (reintroduced in ORM 3.2)
- `Doctrine\ORM\Query\AST\PartialObjectExpression` is removed. (reintroduced in ORM 3.2)
- `Doctrine\ORM\Query\SqlWalker::HINT_PARTIAL` (reintroduced in ORM 3.2) and
  `Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD` are removed.
- `Doctrine\ORM\EntityManager*::getPartialReference()` is removed.

## BC BREAK: Enforce ArrayCollection Type on `\Doctrine\ORM\QueryBuilder::setParameters(ArrayCollection $parameters)`

The argument $parameters can no longer be a key=>value array. Only ArrayCollection types are allowed.

### Before

```php
$qb = $em->createQueryBuilder()
    ->select('u')
    ->from('User', 'u')
    ->where('u.id = :user_id1 OR u.id = :user_id2')
    ->setParameters(array(
        'user_id1' => 1,
        'user_id2' => 2
    ));
```

### After

```php
$qb = $em->createQueryBuilder()
    ->select('u')
    ->from('User', 'u')
    ->where('u.id = :user_id1 OR u.id = :user_id2')
    ->setParameters(new ArrayCollection(array(
        new Parameter('user_id1', 1),
        new Parameter('user_id2', 2)
    )));
```

## BC BREAK: `Doctrine\ORM\Persister\Entity\EntityPersister::executeInserts()` return type changed to `void`

Implementors should adapt to the new signature, and should call
`UnitOfWork::assignPostInsertId()` for each entry in the previously returned
array.

## BC BREAK: `Doctrine\ORM\Proxy\ProxyFactory` no longer extends abstract factory from `doctrine/common`

It is no longer possible to call methods, constants or properties inherited
from that class on a `ProxyFactory` instance.

`Doctrine\ORM\Proxy\ProxyFactory::createProxyDefinition()` and
`Doctrine\ORM\Proxy\ProxyFactory::resetUninitializedProxy()` are removed as well.

## BC BREAK: lazy ghosts are enabled unconditionally

`Doctrine\ORM\Configuration::setLazyGhostObjectEnabled()` and
`Doctrine\ORM\Configuration::isLazyGhostObjectEnabled()` are now no-ops and
will be deprecated in 3.1.0

## BC BREAK: collisions in identity map are unconditionally rejected

`Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` and
`Doctrine\ORM\Configuration::isRejectIdCollisionInIdentityMapEnabled()` are now
no-ops and will be deprecated in 3.1.0.

## BC BREAK: Lifecycle callback mapping on embedded classes is now explicitly forbidden

Lifecycle callback mapping on embedded classes produced no effect, and is now
explicitly forbidden to point out mistakes.

## BC BREAK: The `NOTIFY` change tracking policy is removed

You should use `DEFERRED_EXPLICIT` instead.

## BC BREAK: `Mapping\Driver\XmlDriver::__construct()` third argument is now enabled by default

The third argument to
`Doctrine\ORM\Mapping\Driver\XmlDriver::__construct()` was introduced to
let users opt-in to XML validation, that is now always enabled by default.

As a consequence, the same goes for
`Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver`, and for
`Doctrine\ORM\ORMSetup::createXMLMetadataConfiguration()`.

## BC BREAK: `Mapping\Driver\AttributeDriver::__construct()` second argument is now a no-op

The second argument to
`Doctrine\ORM\Mapping\Driver\AttributeDriver::__construct()` was introduced to
let users opt-in to a new behavior, that is now always enforced, regardless of
the value of that argument.

## BC BREAK: `Query::setDQL()` and `Query::setFirstResult()` no longer accept `null`

The `$dqlQuery` argument of `Doctrine\ORM\Query::setDQL()` must always be a
string.

The `$firstResult` argument of `Doctrine\ORM\Query::setFirstResult()` must
always be an integer.

## BC BREAK: `orm:schema-tool:update` option `--complete` is now a no-op

`orm:schema-tool:update` now behaves as if `--complete` was provided,
regardless of whether it is provided or not.

## BC BREAK: Removed `Doctrine\ORM\Proxy\Proxy` interface.

Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized.

## BC BREAK: Overriding fields or associations declared in other than mapped superclasses

As stated in the documentation, fields and associations may only be overridden when being inherited
from mapped superclasses. Overriding them for parent entity classes now throws a `MappingException`.

## BC BREAK: Undeclared entity inheritance now throws a `MappingException`

As soon as an entity class inherits from another entity class, inheritance has to
be declared by adding the appropriate configuration for the root entity.

## Removed `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs`

Use `getObjectManager()` instead.

## BC BREAK: Removed `Doctrine\ORM\Mapping\ClassMetadataInfo` class

Use `Doctrine\ORM\Mapping\ClassMetadata` instead.

## BC BREAK: Removed `Doctrine\ORM\Event\LifecycleEventArgs` class.

Use one of the dedicated event classes instead:

* `Doctrine\ORM\Event\PrePersistEventArgs`
* `Doctrine\ORM\Event\PreUpdateEventArgs`
* `Doctrine\ORM\Event\PreRemoveEventArgs`
* `Doctrine\ORM\Event\PostPersistEventArgs`
* `Doctrine\ORM\Event\PostUpdateEventArgs`
* `Doctrine\ORM\Event\PostRemoveEventArgs`
* `Doctrine\ORM\Event\PostLoadEventArgs`

## BC BREAK: Removed `AttributeDriver::$entityAnnotationClasses` and `AttributeDriver::getReader()`

* If you need to change the behavior of `AttributeDriver::isTransient()`,
  override that method instead.
* The attribute reader is internal to the driver and should not be accessed from outside.

## BC BREAK: Removed `Doctrine\ORM\Query\AST\InExpression`

The AST parser will create a `InListExpression` or a `InSubselectExpression` when
encountering an `IN ()` DQL expression instead of a generic `InExpression`.

As a consequence, `SqlWalker::walkInExpression()` has been replaced by
`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`.

## BC BREAK: Changed `EntityManagerInterface#refresh($entity)`, `EntityManagerDecorator#refresh($entity)` and `UnitOfWork#refresh($entity)` signatures

The new signatures of these methods add an optional `LockMode|int|null $lockMode`
param with default `null` value (no lock).

## BC Break: Removed AnnotationDriver

The annotation driver and anything related to annotation has been removed.
Please migrate to another mapping driver.

The `Doctrine\ORM\Mapping\Annotation` maker interface has been removed in favor of the new
`Doctrine\ORM\Mapping\MappingAttribute` interface.

## BC BREAK: Removed `EntityManager::create()`

The constructor of `EntityManager` is now public and must be used instead of the `create()` method.
However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters.
You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the
connection.

## BC BREAK: Removed `QueryBuilder` methods and constants.

The following `QueryBuilder` constants and methods have been removed:

1. `SELECT`,
2. `DELETE`,
3. `UPDATE`,
4. `STATE_DIRTY`,
5. `STATE_CLEAN`,
6. `getState()`,
7. `getType()`.

## BC BREAK: Omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete` is not supported anymore

When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted.

### Before

```php
$qb = $em->createQueryBuilder()
    ->delete('User u')
    ->where('u.id = :user_id')
    ->setParameter('user_id', 1);
```

### After

```php
$qb = $em->createQueryBuilder()
    ->delete('User', 'u')
    ->where('u.id = :user_id')
    ->setParameter('user_id', 1);
```

## BC BREAK: Split output walkers and tree walkers

`SqlWalker` and its child classes don't implement the `TreeWalker` interface
anymore.

The following methods have been removed from the `TreeWalker` interface and
from the `TreeWalkerAdapter` and `TreeWalkerChain` classes:

* `setQueryComponent()`
* `walkSelectClause()`
* `walkFromClause()`
* `walkFunction()`
* `walkOrderByClause()`
* `walkOrderByItem()`
* `walkHavingClause()`
* `walkJoin()`
* `walkSelectExpression()`
* `walkQuantifiedExpression()`
* `walkSubselect()`
* `walkSubselectFromClause()`
* `walkSimpleSelectClause()`
* `walkSimpleSelectExpression()`
* `walkAggregateExpression()`
* `walkGroupByClause()`
* `walkGroupByItem()`
* `walkDeleteClause()`
* `walkUpdateClause()`
* `walkUpdateItem()`
* `walkWhereClause()`
* `walkConditionalExpression()`
* `walkConditionalTerm()`
* `walkConditionalFactor()`
* `walkConditionalPrimary()`
* `walkExistsExpression()`
* `walkCollectionMemberExpression()`
* `walkEmptyCollectionComparisonExpression()`
* `walkNullComparisonExpression()`
* `walkInExpression()`
* `walkInstanceOfExpression()`
* `walkLiteral()`
* `walkBetweenExpression()`
* `walkLikeExpression()`
* `walkStateFieldPathExpression()`
* `walkComparisonExpression()`
* `walkInputParameter()`
* `walkArithmeticExpression()`
* `walkArithmeticTerm()`
* `walkStringPrimary()`
* `walkArithmeticFactor()`
* `walkSimpleArithmeticExpression()`
* `walkPathExpression()`
* `walkResultVariable()`
* `getExecutor()`

The following changes have been made to the abstract `TreeWalkerAdapter` class:

* The method `setQueryComponent()` is now protected.
* The method `_getQueryComponents()` has been removed in favor of
  `getQueryComponents()`.

## BC BREAK: Removed identity columns emulation through sequences

If the platform you are using does not support identity columns, you should
switch to the `SEQUENCE` strategy.

## BC BREAK: Made setters parameters mandatory

The following methods require an argument when being called. Pass `null`
instead of omitting the argument.

* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()`
* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()`
* `Doctrine\ORM\AbstractQuery::setResultCache()`
* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()`

## BC BREAK: New argument to `NamingStrategy::joinColumnName()`

### Before

```php
<?php
class MyStrategy implements NamingStrategy
{
    /**
     * @param string $propertyName A property name.
     */
    public function joinColumnName($propertyName): string
    {
        // …
    }
}
```

### After

The `class-string` type for `$className` can be inherited from the signature of
the interface.

```php
<?php
class MyStrategy implements NamingStrategy
{
    /**
     * {@inheritdoc}
     */
    public function joinColumnName(string $propertyName, string $className): string
    {
        // …
    }
}
```

## BC BREAK: Remove `StaticPHPDriver` and `DriverChain`

Use `Doctrine\Persistence\Mapping\Driver\StaticPHPDriver` and
`Doctrine\Persistence\Mapping\Driver\MappingDriverChain` from
`doctrine/persistence` instead.

## BC BREAK: `UnderscoreNamingStrategy` is number aware only

The second argument to `UnderscoreNamingStrategy::__construct()` was dropped,
the strategy can no longer be unaware of numbers.

## BC BREAK: Remove `Doctrine\ORM\Tools\DisconnectedClassMetadataFactory`

No replacement is provided.

## BC BREAK: Remove support for `Type::canRequireSQLConversion()`

This feature was deprecated in DBAL 3.3.0 and will be removed in DBAL 4.0.
The value conversion methods are now called regardless of the type.

The `MappingException::sqlConversionNotAllowedForIdentifiers()` method has been removed
as no longer relevant.

## BC Break: Removed the `doctrine` binary.

The documentation explains how the console tools can be bootstrapped for
standalone usage:

https://www.doctrine-project.org/projects/doctrine-orm/en/stable/reference/tools.html

The method `ConsoleRunner::printCliConfigTemplate()` has been removed as well
because it was only useful in the context of the `doctrine` binary.

## BC Break: Removed `EntityManagerHelper` and related logic

All console commands require a `$entityManagerProvider` to be passed via the
constructor. Commands won't try to get the entity manager from a previously
registered `em` console helper.

The following classes have been removed:

* `Doctrine\ORM\Tools\Console\EntityManagerProvider\HelperSetManagerProvider`
* `Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper`

The following breaking changes have been applied to `Doctrine\ORM\Tools\Console\ConsoleRunner`:

* The method `createHelperSet()` has been removed.
* The methods `run()` and `createApplication()` don't accept an instance of
  `HelperSet` as first argument anymore.
* The method `addCommands()` requires an instance of `EntityManagerProvider`
  as second argument now.

## BC Break: `Exception\ORMException` is no longer a class, but an interface

All methods in `Doctrine\ORM\ORMException` have been extracted to dedicated exceptions.

 * `missingMappingDriverImpl()` => `Exception\MissingMappingDriverImplementation::create()`
 * `unrecognizedField()` => `Persisters\Exception\UnrecognizedField::byName()`
 * `unexpectedAssociationValue()` => `Exception\UnexpectedAssociationValue::create()`
 * `invalidOrientation()` => `Persisters\Exception\InvalidOrientation::fromClassNameAndField()`
 * `entityManagerClosed()` => `Exception\EntityManagerClosed::create()`
 * `invalidHydrationMode()` => `Exception\InvalidHydrationMode::fromMode()`
 * `mismatchedEventManager()` => `Exception\MismatchedEventManager::create()`
 * `findByRequiresParameter()` => `Repository\Exception\InvalidMagicMethodCall::onMissingParameter()`
 * `invalidMagicCall()` => `Repository\Exception\InvalidMagicMethodCall::becauseFieldNotFoundIn()`
 * `invalidFindByInverseAssociation()` => `Repository\Exception\InvalidFindByCall::fromInverseSideUsage()`
 * `invalidResultCacheDriver()` => `Cache\Exception\InvalidResultCacheDriver::create()`
 * `notSupported()` => `Exception\NotSupported::create()`
 * `queryCacheNotConfigured()` => `QueryCacheNotConfigured::create()`
 * `metadataCacheNotConfigured()` => `Cache\Exception\MetadataCacheNotConfigured::create()`
 * `queryCacheUsesNonPersistentCache()` => `Cache\Exception\QueryCacheUsesNonPersistentCache::fromDriver()`
 * `metadataCacheUsesNonPersistentCache()` => `Cache\Exception\MetadataCacheUsesNonPersistentCache::fromDriver()`
 * `proxyClassesAlwaysRegenerating()` => `Exception\ProxyClassesAlwaysRegenerating::create()`
 * `invalidEntityRepository()` => `Exception\InvalidEntityRepository::fromClassName()`
 * `missingIdentifierField()` => `Exception\MissingIdentifierField::fromFieldAndClass()`
 * `unrecognizedIdentifierFields()` => `Exception\UnrecognizedIdentifierFields::fromClassAndFieldNames()`
 * `cantUseInOperatorOnCompositeKeys()` => `Persisters\Exception\CantUseInOperatorOnCompositeKeys::create()`

## BC Break: `CacheException` is no longer a class, but an interface

All methods in `Doctrine\ORM\Cache\CacheException` have been extracted to dedicated exceptions.

 * `updateReadOnlyCollection()` => `Cache\Exception\CannotUpdateReadOnlyCollection::fromEntityAndField()`
 * `updateReadOnlyEntity()` => `Cache\Exception\CannotUpdateReadOnlyEntity::fromEntity()`
 * `nonCacheableEntity()` => `Cache\Exception\NonCacheableEntity::fromEntity()`
 * `nonCacheableEntityAssociation()` => `Cache\Exception\NonCacheableEntityAssociation::fromEntityAndField()`


## BC Break: Missing type declaration added for identifier generators

Although undocumented, it was possible to configure a custom repository
class that implements `ObjectRepository` but does not extend the
`EntityRepository` base class. Repository classes have to extend
`EntityRepository` now.

## BC BREAK: Removed support for entity namespace alias

- `EntityManager::getRepository()` no longer accepts the entity namespace alias
  notation.
- `Configuration::addEntityNamespace()` and
  `Configuration::getEntityNamespace()` have been removed.

## BC BREAK: Remove helper methods from `AbstractCollectionPersister`

The following protected methods of
`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister`
have been removed.

* `evictCollectionCache()`
* `evictElementCache()`

## BC BREAK: `Doctrine\ORM\Query\TreeWalkerChainIterator`

This class has been removed without replacement.

## BC BREAK: Remove quoting methods from `ClassMetadata`

The following methods have been removed from the class metadata because
quoting is handled by implementations of `Doctrine\ORM\Mapping\QuoteStrategy`:

* `getQuotedIdentifierColumnNames()`
* `getQuotedColumnName()`
* `getQuotedTableName()`
* `getQuotedJoinTableName()`

## BC BREAK: Remove ability to merge detached entities

Merge semantics was a poor fit for the PHP "share-nothing" architecture.
In addition to that, merging caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case
bugs/scenarios.

The method `UnitOfWork::merge()` has been removed. The method
`EntityManager::merge()` will throw an exception on each call.

## BC BREAK: Removed ability to partially flush/commit entity manager and unit of work

The following methods don't accept a single entity or an array of entities anymore:

* `Doctrine\ORM\EntityManager::flush()`
* `Doctrine\ORM\Decorator\EntityManagerDecorator::flush()`
* `Doctrine\ORM\UnitOfWork::commit()`

The semantics of `flush()` and `commit()` will remain the same, but the change
tracking will be performed on all entities managed by the unit of work, and not
just on the provided entities, as the parameter is now completely ignored.

## BC BREAK: Removed ability to partially clear entity manager and unit of work

* Passing an argument other than `null` to `EntityManager::clear()` will raise
  an exception.
* The unit of work cannot be cleared partially anymore. Passing an argument to
  `UnitOfWork::clear()` does not have any effect anymore; the unit of work is
  cleared completely.
* The method `EntityRepository::clear()` has been removed.
* The methods `getEntityClass()` and `clearsAllEntities()` have been removed
  from `OnClearEventArgs`.

## BC BREAK: Remove support for Doctrine Cache

The Doctrine Cache library is not supported anymore. The following methods
have been removed from `Doctrine\ORM\Configuration`:

* `getQueryCacheImpl()`
* `setQueryCacheImpl()`
* `getHydrationCacheImpl()`
* `setHydrationCacheImpl()`
* `getMetadataCacheImpl()`
* `setMetadataCacheImpl()`

The methods have been replaced by PSR-6 compatible counterparts
(just strip the `Impl` suffix from the old name to get the new one).

## BC BREAK: Remove `Doctrine\ORM\Configuration::newDefaultAnnotationDriver`

This functionality has been moved to the new `ORMSetup` class. Call
`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create
a new annotation driver.

## BC BREAK: Remove `Doctrine\ORM\Tools\Setup`

In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which
accepted a Doctrine Cache instance in each method has been removed.

The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6
cache instead.

## BC BREAK: Removed named queries

All APIs related to named queries have been removed.

## BC BREAK: Remove old cache accessors and mutators from query classes

The following methods have been removed from `AbstractQuery`:

* `setResultCacheDriver()`
* `getResultCacheDriver()`
* `useResultCache()`
* `getResultCacheLifetime()`
* `getResultCacheId()`

The following methods have been removed from `Query`:

* `setQueryCacheDriver()`
* `getQueryCacheDriver()`

## BC BREAK: Remove `Doctrine\ORM\Cache\MultiGetRegion`

The interface has been merged into `Doctrine\ORM\Cache\Region`.

## BC BREAK: Rename `AbstractIdGenerator::generate()` to `generateId()`

* Implementations of `AbstractIdGenerator` have to implement the method
  `generateId()`.
* The method `generate()` has been removed from `AbstractIdGenerator`.

## BC BREAK: Remove cache settings inspection

Doctrine does not provide its own cache implementation anymore and relies on
the PSR-6 standard instead. As a consequence, we cannot determine anymore
whether a given cache adapter is suitable for a production environment.
Because of that, functionality that aims to do so has been removed:

* `Configuration::ensureProductionSettings()`
* the `orm:ensure-production-settings` console command

## BC BREAK: PSR-6-based second level cache

The second level cache has been reworked to consume a PSR-6 cache. Using a
Doctrine Cache instance is not supported anymore.

* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as
  second argument now.
* `DefaultMultiGetRegion`: This class has been removed.
* `DefaultRegion`:
    * The constructor expects a PSR-6 cache item pool as second argument now.
    * The protected `$cache` property is removed.
    * The properties `$name` and `$lifetime` as well as the constant
      `REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are
      `private` now.
    * The method `getCache()` has been removed.


## BC Break: Remove `Doctrine\ORM\Mapping\Driver\PHPDriver`

Use `StaticPHPDriver` instead when you want to programmatically configure
entity metadata.

## BC BREAK: Remove `Doctrine\ORM\EntityManagerInterface#transactional()`

This method has been replaced by `Doctrine\ORM\EntityManagerInterface#wrapInTransaction()`.

## BC BREAK: Removed support for schema emulation.

The ORM no longer attempts to emulate schemas on SQLite.

## BC BREAK: Remove `Setup::registerAutoloadDirectory()`

Use Composer's autoloader instead.

## BC BREAK: Remove YAML mapping drivers.

If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** migrate to
attribute, annotation or XML drivers instead.

You can use the `orm:convert-mapping` command to convert your metadata mapping to XML
_before_ upgrading to 3.0:

```sh
php doctrine orm:convert-mapping xml /path/to/mapping-path-converted-to-xml
```

## BC BREAK: Remove code generators and related console commands

These console commands have been removed:

* `orm:convert-d1-schema`
* `orm:convert-mapping`
* `orm:generate:entities`
* `orm:generate-repositories`

These classes have been deprecated:

* `Doctrine\ORM\Tools\ConvertDoctrine1Schema`
* `Doctrine\ORM\Tools\EntityGenerator`
* `Doctrine\ORM\Tools\EntityRepositoryGenerator`

The entire `Doctrine\ORM\Tools\Export` namespace has been removed as well.

## BC BREAK: Removed `Doctrine\ORM\Version`

Use Composer's runtime API if you _really_ need to check the version of the ORM package at runtime.

## BC BREAK: EntityRepository::count() signature change

The argument `$criteria` of `Doctrine\ORM\EntityRepository::count()` is now
optional. Overrides in child classes should be made compatible.

## BC BREAK: changes in exception hierarchy

- `Doctrine\ORM\ORMException` has been removed
- `Doctrine\ORM\Exception\ORMException` is now an interface

## Variadic methods now use native variadics
The following methods were using `func_get_args()` to simulate a variadic argument:
- `Doctrine\ORM\Query\Expr#andX()`
- `Doctrine\ORM\Query\Expr#orX()`
- `Doctrine\ORM\QueryBuilder#select()`
- `Doctrine\ORM\QueryBuilder#addSelect()`
- `Doctrine\ORM\QueryBuilder#where()`
- `Doctrine\ORM\QueryBuilder#andWhere()`
- `Doctrine\ORM\QueryBuilder#orWhere()`
- `Doctrine\ORM\QueryBuilder#groupBy()`
- `Doctrine\ORM\QueryBuilder#andGroupBy()`
- `Doctrine\ORM\QueryBuilder#having()`
- `Doctrine\ORM\QueryBuilder#andHaving()`
- `Doctrine\ORM\QueryBuilder#orHaving()`
A variadic argument is now actually used in their signatures signature (`...$x`).
Signatures of overridden methods should be changed accordingly

## Minor BC BREAK: removed `Doctrine\ORM\EntityManagerInterface#copy()`

Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is removed in 3.0.

## BC BREAK: Removed classes related to UUID and TABLE generator strategies

The following classes have been removed:
- `Doctrine\ORM\Id\TableGenerator`
- `Doctrine\ORM\Id\UuidGenerator`

Using the `UUID` strategy for generating identifiers is not supported anymore.

## BC BREAK: Removed `Query::iterate()`

The deprecated method `Query::iterate()` has been removed along with the
following classes and methods:

- `AbstractHydrator::iterate()`
- `AbstractHydrator::hydrateRow()`
- `IterableResult`

Use `toIterable()` instead.

# Upgrade to 2.20

## Add `Doctrine\ORM\Query\OutputWalker` interface, deprecate `Doctrine\ORM\Query\SqlWalker::getExecutor()`

Output walkers should implement the new `\Doctrine\ORM\Query\OutputWalker` interface and create
`Doctrine\ORM\Query\Exec\SqlFinalizer` instances instead of `Doctrine\ORM\Query\Exec\AbstractSqlExecutor`s.
The output walker must not base its workings on the query `firstResult`/`maxResult` values, so that the
`SqlFinalizer` can be kept in the query cache and used regardless of the actual `firstResult`/`maxResult` values.
Any operation dependent on `firstResult`/`maxResult` should take place within the `SqlFinalizer::createExecutor()`
method. Details can be found at https://github.com/doctrine/orm/pull/11188.

## Explictly forbid property hooks

Property hooks are not supported yet by Doctrine ORM. Until support is added,
they are explicitly forbidden because the support would result in a breaking
change in behavior.

Progress on this is tracked at https://github.com/doctrine/orm/issues/11624 .

## PARTIAL DQL syntax is undeprecated

Use of the PARTIAL keyword is not deprecated anymore in DQL, because we will be
able to support PARTIAL objects with PHP 8.4 Lazy Objects and
Symfony/VarExporter in a better way. When we decided to remove this feature
these two abstractions did not exist yet.

WARNING: If you want to upgrade to 3.x and still use PARTIAL keyword in DQL
with array or object hydrators, then you have to directly migrate to ORM 3.3.x or higher.
PARTIAL keyword in DQL is not available in 3.0, 3.1 and 3.2 of ORM.

## Deprecate `\Doctrine\ORM\Query\Parser::setCustomOutputTreeWalker()`

Use the `\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER` query hint to set the output walker
class instead of setting it through the `\Doctrine\ORM\Query\Parser::setCustomOutputTreeWalker()` method
on the parser instance.

# Upgrade to 2.19

## Deprecate calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association

Calling
`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with
the owning side of an association returns `null`, which is undocumented, and
wrong according to the phpdoc of the parent method.

If you do not know whether you are on the owning or inverse side of an association,
you can use  `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()`
to find out.

## Deprecate `Doctrine\ORM\Query\Lexer::T_*` constants

Use `Doctrine\ORM\Query\TokenType::T_*` instead.

# Upgrade to 2.17

## Deprecate annotations classes for named queries

The following classes have been deprecated:

* `Doctrine\ORM\Mapping\NamedNativeQueries`
* `Doctrine\ORM\Mapping\NamedNativeQuery`
* `Doctrine\ORM\Mapping\NamedQueries`
* `Doctrine\ORM\Mapping\NamedQuery`

## Deprecate `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::_sqlStatements`

Use `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::sqlStatements` instead.

## Undeprecate `Doctrine\ORM\Proxy\Autoloader`

It will be a full-fledged class, no longer extending
`Doctrine\Common\Proxy\Autoloader` in 3.0.x.

## Deprecated: reliance on the non-optimal defaults that come with the `AUTO` identifier generation strategy

When the `AUTO` identifier generation strategy was introduced, the best
strategy at the time was selected for each database platform.
A lot of time has passed since then, and with ORM 3.0.0 and DBAL 4.0.0, support
for better strategies will be added.

Because of that, it is now deprecated to rely on the historical defaults when
they differ from what we will be recommended in the future.

Instead, you should pick a strategy for each database platform you use, and it
will be used when using `AUTO`. As of now, only PostgreSQL is affected by this.

It is recommended that PostgreSQL users configure their existing and new
applications to use `SEQUENCE` until `doctrine/dbal` 4.0.0 is released:

```php
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
use Doctrine\ORM\Configuration;

assert($configuration instanceof Configuration);
$configuration->setIdentityGenerationPreferences([
    PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE,
]);
```

When DBAL 4 is released, `AUTO` will result in `IDENTITY`, and the above
configuration should be removed to migrate to it.

## Deprecate `EntityManagerInterface::getPartialReference()`

This method does not have a replacement and will be removed in 3.0.

## Deprecate not-enabling lazy-ghosts

Not enabling lazy ghost objects is deprecated. In ORM 3.0, they will be always enabled.
Ensure `Doctrine\ORM\Configuration::setLazyGhostObjectEnabled(true)` is called to enable them.

# Upgrade to 2.16

## Deprecated accepting duplicate IDs in the identity map

For any given entity class and ID value, there should be only one object instance
representing the entity.

In https://github.com/doctrine/orm/pull/10785, a check was added that will guard this
in the identity map. The most probable cause for violations of this rule are collisions
of application-provided IDs.

In ORM 2.16.0, the check was added by throwing an exception. In ORM 2.16.1, this will be
changed to a deprecation notice. ORM 3.0 will make it an exception again. Use
`\Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` if you want to opt-in
to the new mode.

## Potential changes to the order in which `INSERT`s are executed

In https://github.com/doctrine/orm/pull/10547, the commit order computation was improved
to fix a series of bugs where a correct (working) commit order was previously not found.
Also, the new computation may get away with fewer queries being executed: By inserting
referred-to entities first and using their ID values for foreign key fields in subsequent
`INSERT` statements, additional `UPDATE` statements that were previously necessary can be
avoided.

When using database-provided, auto-incrementing IDs, this may lead to IDs being assigned
to entities in a different order than it was previously the case.

## Deprecated returning post insert IDs from `EntityPersister::executeInserts()`

Persisters implementing `\Doctrine\ORM\Persisters\Entity\EntityPersister` should no longer
return an array of post insert IDs from their `::executeInserts()` method. Make the
persister call `Doctrine\ORM\UnitOfWork::assignPostInsertId()` instead.

## Changing the way how reflection-based mapping drivers report fields, deprecated the "old" mode

In ORM 3.0, a change will be made regarding how the `AttributeDriver` reports field mappings.
This change is necessary to be able to detect (and reject) some invalid mapping configurations.

To avoid surprises during 2.x upgrades, the new mode is opt-in. It can be activated on the
`AttributeDriver` and `AnnotationDriver` by setting the `$reportFieldsWhereDeclared`
constructor parameter to `true`. It will cause `MappingException`s to be thrown when invalid
configurations are detected.

Not enabling the new mode will cause a deprecation notice to be raised. In ORM 3.0,
only the new mode will be available.

# Upgrade to 2.15

## Deprecated configuring `JoinColumn` on the inverse side of one-to-one associations

For one-to-one associations, the side using the `mappedBy` attribute is the inverse side.
The owning side is the entity with the table containing the foreign key. Using `JoinColumn`
configuration on the _inverse_ side now triggers a deprecation notice and will be an error
in 3.0.

## Deprecated overriding fields or associations not declared in mapped superclasses

As stated in the documentation, fields and associations may only be overridden when being inherited
from mapped superclasses. Overriding them for parent entity classes now triggers a deprecation notice
and will be an error in 3.0.

## Deprecated undeclared entity inheritance

As soon as an entity class inherits from another entity class, inheritance has to
be declared by adding the appropriate configuration for the root entity.

## Deprecated stubs for "concrete table inheritance"

This third way of mapping class inheritance was never implemented. Code stubs are
now deprecated and will be removed in 3.0.

* `\Doctrine\ORM\Mapping\ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS` constant
* `\Doctrine\ORM\Mapping\ClassMetadataInfo::isInheritanceTypeTablePerClass()` method
* Using `TABLE_PER_CLASS` as the value for the `InheritanceType` attribute or annotation
  or in XML configuration files.

# Upgrade to 2.14

## Deprecated `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byName($field)` method.

Use `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byFullyQualifiedName($className, $field)` instead.

## Deprecated constants of `Doctrine\ORM\Internal\CommitOrderCalculator`

The following public constants have been deprecated:

* `CommitOrderCalculator::NOT_VISITED`
* `CommitOrderCalculator::IN_PROGRESS`
* `CommitOrderCalculator::VISITED`

These constants were used for internal purposes. Relying on them is discouraged.

## Deprecated `Doctrine\ORM\Query\AST\InExpression`

The AST parser will create a `InListExpression` or a `InSubselectExpression` when
encountering an `IN ()` DQL expression instead of a generic `InExpression`.

As a consequence, `SqlWalker::walkInExpression()` has been deprecated in favor of
`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`.

## Deprecated constructing a `CacheKey` without `$hash`

The `Doctrine\ORM\Cache\CacheKey` class has an explicit constructor now with
an optional parameter `$hash`. That parameter will become mandatory in 3.0.

## Deprecated `AttributeDriver::$entityAnnotationClasses`

If you need to change the behavior of `AttributeDriver::isTransient()`,
override that method instead.

## Deprecated incomplete schema updates

Using `orm:schema-tool:update` without passing the `--complete` flag is
deprecated. Use schema asset filtering if you need to preserve assets not
managed by DBAL.

Likewise, calling `SchemaTool::updateSchema()` or
`SchemaTool::getUpdateSchemaSql()` with a second argument is deprecated.

## Deprecated annotation mapping driver.

Please switch to one of the other mapping drivers. Native attributes which PHP
supports since version 8.0 are probably your best option.

As a consequence, the following methods are deprecated:
- `ORMSetup::createAnnotationMetadataConfiguration`
- `ORMSetup::createDefaultAnnotationDriver`

The marker interface `Doctrine\ORM\Mapping\Annotation` is deprecated as well.
All annotation/attribute classes implement
`Doctrine\ORM\Mapping\MappingAttribute` now.

## Deprecated `Doctrine\ORM\Proxy\Proxy` interface.

Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized.

## Deprecated `Doctrine\ORM\Event\LifecycleEventArgs` class.

It will be removed in 3.0. Use one of the dedicated event classes instead:

* `Doctrine\ORM\Event\PrePersistEventArgs`
* `Doctrine\ORM\Event\PreUpdateEventArgs`
* `Doctrine\ORM\Event\PreRemoveEventArgs`
* `Doctrine\ORM\Event\PostPersistEventArgs`
* `Doctrine\ORM\Event\PostUpdateEventArgs`
* `Doctrine\ORM\Event\PostRemoveEventArgs`
* `Doctrine\ORM\Event\PostLoadEventArgs`

# Upgrade to 2.13

## Deprecated `EntityManager::create()`

The constructor of `EntityManager` is now public and should be used instead of the `create()` method.
However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters.
You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the
connection.

## Deprecated `QueryBuilder` methods and constants.

1. The `QueryBuilder::getState()` method has been deprecated as the builder state is an internal concern.
2. Relying on the type of the query being built by using `QueryBuilder::getType()` has been deprecated.
   If necessary, track the type of the query being built outside of the builder.

The following `QueryBuilder` constants related to the above methods have been deprecated:

1. `SELECT`,
2. `DELETE`,
3. `UPDATE`,
4. `STATE_DIRTY`,
5. `STATE_CLEAN`.

## Deprecated omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete`

When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted.

### Before

```php
$qb = $em->createQueryBuilder()
    ->delete('User u')
    ->where('u.id = :user_id')
    ->setParameter('user_id', 1);
```

### After

```php
$qb = $em->createQueryBuilder()
    ->delete('User', 'u')
    ->where('u.id = :user_id')
    ->setParameter('user_id', 1);
```

## Deprecated using the `IDENTITY` identifier strategy on platform that do not support identity columns

If identity columns are emulated with sequences on the platform you are using,
you should switch to the `SEQUENCE` strategy.

## Deprecated passing `null` to `Doctrine\ORM\Query::setFirstResult()`

`$query->setFirstResult(null);` is equivalent to `$query->setFirstResult(0)`.

## Deprecated calling setters without arguments

The following methods will require an argument in 3.0. Pass `null` instead of
omitting the argument.

* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()`
* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()`
* `Doctrine\ORM\AbstractQuery::setResultCache()`
* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()`

## Deprecated passing invalid fetch modes to `AbstractQuery::setFetchMode()`

Calling `AbstractQuery::setFetchMode()` with anything else than
`Doctrine\ORM\Mapping::FETCH_EAGER` results in
`Doctrine\ORM\Mapping::FETCH_LAZY` being used. Relying on that behavior is
deprecated and will result in an exception in 3.0.

## Deprecated `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs`

This method has been deprecated in:

* `Doctrine\ORM\Event\OnClearEventArgs`
* `Doctrine\ORM\Event\OnFlushEventArgs`
* `Doctrine\ORM\Event\PostFlushEventArgs`
* `Doctrine\ORM\Event\PreFlushEventArgs`

It will be removed in 3.0. Use `getObjectManager()` instead.

## Prepare split of output walkers and tree walkers

In 3.0, `SqlWalker` and its child classes won't implement the `TreeWalker`
interface anymore. Relying on that inheritance is deprecated.

The following methods of the `TreeWalker` interface have been deprecated:

* `setQueryComponent()`
* `walkSelectClause()`
* `walkFromClause()`
* `walkFunction()`
* `walkOrderByClause()`
* `walkOrderByItem()`
* `walkHavingClause()`
* `walkJoin()`
* `walkSelectExpression()`
* `walkQuantifiedExpression()`
* `walkSubselect()`
* `walkSubselectFromClause()`
* `walkSimpleSelectClause()`
* `walkSimpleSelectExpression()`
* `walkAggregateExpression()`
* `walkGroupByClause()`
* `walkGroupByItem()`
* `walkDeleteClause()`
* `walkUpdateClause()`
* `walkUpdateItem()`
* `walkWhereClause()`
* `walkConditionalExpression()`
* `walkConditionalTerm()`
* `walkConditionalFactor()`
* `walkConditionalPrimary()`
* `walkExistsExpression()`
* `walkCollectionMemberExpression()`
* `walkEmptyCollectionComparisonExpression()`
* `walkNullComparisonExpression()`
* `walkInExpression()`
* `walkInstanceOfExpression()`
* `walkLiteral()`
* `walkBetweenExpression()`
* `walkLikeExpression()`
* `walkStateFieldPathExpression()`
* `walkComparisonExpression()`
* `walkInputParameter()`
* `walkArithmeticExpression()`
* `walkArithmeticTerm()`
* `walkStringPrimary()`
* `walkArithmeticFactor()`
* `walkSimpleArithmeticExpression()`
* `walkPathExpression()`
* `walkResultVariable()`
* `getExecutor()`

The following changes have been made to the abstract `TreeWalkerAdapter` class:

* All implementations of now-deprecated `TreeWalker` methods have been
  deprecated as well.
* The method `setQueryComponent()` will become protected in 3.0. Calling it
  publicly is deprecated.
* The method `_getQueryComponents()` is deprecated, call `getQueryComponents()`
  instead.

On the `TreeWalkerChain` class, all implementations of now-deprecated
`TreeWalker` methods have been deprecated as well.  However, `SqlWalker` is
unaffected by those deprecations and will continue to implement all of those
methods.

## Deprecated passing `null` to `Doctrine\ORM\Query::setDQL()`

Doing `$query->setDQL(null);` achieves nothing.

## Deprecated omitting second argument to `NamingStrategy::joinColumnName`

When implementing `NamingStrategy`, it is deprecated to implement
`joinColumnName()` with only one argument.

### Before

```php
<?php
class MyStrategy implements NamingStrategy
{
    /**
     * @param string $propertyName A property name.
     */
    public function joinColumnName($propertyName): string
    {
        // …
    }
}
```

### After

For backward-compatibility reasons, the parameter has to be optional, but can
be documented as guaranteed to be a `class-string`.

```php
<?php
class MyStrategy implements NamingStrategy
{
    /**
     * @param string       $propertyName A property name.
     * @param class-string $className
     */
    public function joinColumnName($propertyName, $className = null): string
    {
        // …
    }
}
```

## Deprecated methods related to named queries

The following methods have been deprecated:

- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryResultClassMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryResultSetMapping()`
- `Doctrine\ORM\Query\ResultSetMappingBuilder::addNamedNativeQueryEntityResultMapping()`

## Deprecated classes related to Doctrine 1 and reverse engineering

The following classes have been deprecated:

- `Doctrine\ORM\Tools\ConvertDoctrine1Schema`
- `Doctrine\ORM\Tools\DisconnectedClassMetadataFactory`

## Deprecate `ClassMetadataInfo` usage

It is deprecated to pass `Doctrine\ORM\Mapping\ClassMetadataInfo` instances
that are not also instances of `Doctrine\ORM\ClassMetadata` to the following
methods:

- `Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder::__construct()`
- `Doctrine\ORM\Mapping\Driver\DatabaseDriver::loadMetadataForClass()`
- `Doctrine\ORM\Tools\SchemaValidator::validateClass()`

# Upgrade to 2.12

## Deprecated the `doctrine` binary.

The documentation explains how the console tools can be bootstrapped for
standalone usage.

The method `ConsoleRunner::printCliConfigTemplate()` is deprecated because it
was only useful in the context of the `doctrine` binary.

## Deprecate omitting `$class` argument to `ORMInvalidArgumentException::invalidIdentifierBindingEntity()`

To make it easier to identify understand the cause for that exception, it is
deprecated to omit the class name when calling
`ORMInvalidArgumentException::invalidIdentifierBindingEntity()`.

## Deprecate `Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper`

Using a console helper to provide the ORM's console commands with one or
multiple entity managers had been deprecated with 2.9 already. This leaves
The `EntityManagerHelper` class with no purpose which is why it is now
deprecated too. Applications that still rely on the `em` console helper, can
easily recreate that class in their own codebase.

## Deprecate custom repository classes that don't extend `EntityRepository`

Although undocumented, it is currently possible to configure a custom repository
class that implements `ObjectRepository` but does not extend the
`EntityRepository` base class.

This is now deprecated. Please extend `EntityRepository` instead.

## Deprecated more APIs related to entity namespace aliases

```diff
-$config = $entityManager->getConfiguration();
-$config->addEntityNamespace('CMS', 'My\App\Cms');
+use My\App\Cms\CmsUser;

-$entityManager->getRepository('CMS:CmsUser');
+$entityManager->getRepository(CmsUser::class);
```

## Deprecate `AttributeDriver::getReader()` and `AnnotationDriver::getReader()`

That method was inherited from the abstract `AnnotationDriver` class of
`doctrine/persistence`, and does not seem to serve any purpose.

## Un-deprecate `Doctrine\ORM\Proxy\Proxy`

Because no forward-compatible new proxy solution had been implemented yet, the
current proxy mechanism is not considered deprecated anymore for the time
being. This applies to the following interfaces/classes:

* `Doctrine\ORM\Proxy\Proxy`
* `Doctrine\ORM\Proxy\ProxyFactory`

These methods have been un-deprecated:

* `Doctrine\ORM\Configuration::getAutoGenerateProxyClasses()`
* `Doctrine\ORM\Configuration::getProxyDir()`
* `Doctrine\ORM\Configuration::getProxyNamespace()`

Note that the `Doctrine\ORM\Proxy\Autoloader` remains deprecated and will be removed in 3.0.

## Deprecate helper methods from `AbstractCollectionPersister`

The following protected methods of
`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister`
are not in use anymore and will be removed.

* `evictCollectionCache()`
* `evictElementCache()`

## Deprecate `Doctrine\ORM\Query\TreeWalkerChainIterator`

This class won't have a replacement.

## Deprecate `OnClearEventArgs::getEntityClass()` and `OnClearEventArgs::clearsAllEntities()`

These methods will be removed in 3.0 along with the ability to partially clear
the entity manager.

## Deprecate `Doctrine\ORM\Configuration::newDefaultAnnotationDriver`

This functionality has been moved to the new `ORMSetup` class. Call
`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create
a new annotation driver.

## Deprecate `Doctrine\ORM\Tools\Setup`

In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which
accepted a Doctrine Cache instance in each method has been deprecated.

The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6
cache instead.

## Deprecate `Doctrine\ORM\Cache\MultiGetRegion`

The interface will be merged with `Doctrine\ORM\Cache\Region` in 3.0.

# Upgrade to 2.11

## Rename `AbstractIdGenerator::generate()` to `generateId()`

Implementations of `AbstractIdGenerator` have to override the method
`generateId()` without calling the parent implementation. Not doing so is
deprecated. Calling `generate()` on any `AbstractIdGenerator` implementation
is deprecated.

## PSR-6-based second level cache

The second level cache has been reworked to consume a PSR-6 cache. Using a
Doctrine Cache instance is deprecated.

* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as
  second argument now.
* `DefaultMultiGetRegion`: This class is deprecated in favor of `DefaultRegion`.
* `DefaultRegion`:
  * The constructor expects a PSR-6 cache item pool as second argument now.
  * The protected `$cache` property is deprecated.
  * The properties `$name` and `$lifetime` as well as the constant
   `REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are flagged as
   `@internal` now. They all will become `private` in 3.0.
  * The method `getCache()` is deprecated without replacement.

## Deprecated: `Doctrine\ORM\Mapping\Driver\PHPDriver`

Use `StaticPHPDriver` instead when you want to programmatically configure
entity metadata.

You can convert mappings with the `orm:convert-mapping` command or more simply
in this case, `include` the metadata file from the `loadMetadata` static method
used by the `StaticPHPDriver`.

## Deprecated: `Setup::registerAutoloadDirectory()`

Use Composer's autoloader instead.

## Deprecated: `AbstractHydrator::hydrateRow()`

Following the deprecation of the method `AbstractHydrator::iterate()`, the
method `hydrateRow()` has been deprecated as well.

## Deprecate cache settings inspection

Doctrine does not provide its own cache implementation anymore and relies on
the PSR-6 standard instead. As a consequence, we cannot determine anymore
whether a given cache adapter is suitable for a production environment.
Because of that, functionality that aims to do so has been deprecated:

* `Configuration::ensureProductionSettings()`
* the `orm:ensure-production-settings` console command

# Upgrade to 2.10

## BC Break: `UnitOfWork` now relies on SPL object IDs, not hashes

When calling the following methods, you are now supposed to use the result of
`spl_object_id()`, and not `spl_object_hash()`:
- `UnitOfWork::clearEntityChangeSet()`
- `UnitOfWork::setOriginalEntityProperty()`

## BC Break: Removed `TABLE` id generator strategy

The implementation was unfinished for 14 years.
It is now deprecated to rely on:
- `Doctrine\ORM\Id\TableGenerator`;
- `Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_TABLE`;
- `Doctrine\ORM\Mapping\ClassMetadata::$tableGeneratorDefinition`;
- or `Doctrine\ORM\Mapping\ClassMetadata::isIdGeneratorTable()`.

## New method `Doctrine\ORM\EntityManagerInterface#wrapInTransaction($func)`

Works the same as `Doctrine\ORM\EntityManagerInterface#transactional()` but returns any value returned from `$func` closure rather than just _non-empty value returned from the closure or true_.

Because of BC policy, the method does not exist on the interface yet. This is the example of safe usage:

```php
function foo(EntityManagerInterface $entityManager, callable $func) {
    if (method_exists($entityManager, 'wrapInTransaction')) {
        return $entityManager->wrapInTransaction($func);
    }

    return $entityManager->transactional($func);
}
```

`Doctrine\ORM\EntityManagerInterface#transactional()` has been deprecated.

## Minor BC BREAK: some exception methods have been removed

The following methods were not in use and are very unlikely to be used by
downstream packages or applications, and were consequently removed:

- `ORMException::entityMissingForeignAssignedId`
- `ORMException::entityMissingAssignedIdForField`
- `ORMException::invalidFlushMode`

## Deprecated: database-side UUID generation

[DB-generated UUIDs are deprecated as of `doctrine/dbal` 2.8][DBAL deprecation].
As a consequence, using the `UUID` strategy for generating identifiers is deprecated as well.
Furthermore, relying on the following classes and methods is deprecated:

- `Doctrine\ORM\Id\UuidGenerator`
- `Doctrine\ORM\Mapping\ClassMetadataInfo::isIdentifierUuid()`

[DBAL deprecation]: https://github.com/doctrine/dbal/pull/3212

## Minor BC BREAK: Custom hydrators and `toIterable()`

The type declaration of the `$stmt` parameter of `AbstractHydrator::toIterable()` has been removed. This change might
break custom hydrator implementations that override this very method.

Overriding this method is not recommended, which is why the method is documented as `@final` now.

```diff
- public function toIterable(ResultStatement $stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable
+ public function toIterable($stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable
```

## Deprecated: Entity Namespace Aliases

Entity namespace aliases are deprecated, use the magic ::class constant to abbreviate full class names
in EntityManager, EntityRepository and DQL.

```diff
-  $entityManager->find('MyBundle:User', $id);
+  $entityManager->find(User::class, $id);
```

# Upgrade to 2.9

## Minor BC BREAK: Setup tool needs cache implementation

With the deprecation of doctrine/cache, the setup tool might no longer work as expected without a different cache
implementation. To work around this:
* Install symfony/cache: `composer require symfony/cache`. This will keep previous behaviour without any changes
* Instantiate caches yourself: to use a different cache implementation, pass a cache instance when calling any
  configuration factory in the setup tool:
  ```diff
  - $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir);
  + $cache = \Doctrine\Common\Cache\Psr6\DoctrineProvider::wrap($anyPsr6Implementation);
  + $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache);
  ```
* As a quick workaround, you can lock the doctrine/cache dependency to work around this: `composer require doctrine/cache ^1.11`.
  Note that this is only recommended as a bandaid fix, as future versions of ORM will no longer work with doctrine/cache
  1.11.

## Deprecated: doctrine/cache for metadata caching

The `Doctrine\ORM\Configuration#setMetadataCacheImpl()` method is deprecated and should no longer be used. Please use
`Doctrine\ORM\Configuration#setMetadataCache()` with any PSR-6 cache adapter instead.

## Removed: flushing metadata cache

To support PSR-6 caches, the `--flush` option for the `orm:clear-cache:metadata` command is ignored. Metadata cache is
now always cleared regardless of the cache adapter being used.

# Upgrade to 2.8

## Minor BC BREAK: Failed commit now throw OptimisticLockException

Method `Doctrine\ORM\UnitOfWork#commit()` can throw an OptimisticLockException when a commit silently fails and returns false
since `Doctrine\DBAL\Connection#commit()` signature changed from returning void to boolean

## Deprecated: `Doctrine\ORM\AbstractQuery#iterate()`

The method `Doctrine\ORM\AbstractQuery#iterate()` is deprecated in favor of `Doctrine\ORM\AbstractQuery#toIterable()`.
Note that `toIterable()` yields results of the query, unlike `iterate()` which yielded each result wrapped into an array.

# Upgrade to 2.7

## Added `Doctrine\ORM\AbstractQuery#enableResultCache()` and `Doctrine\ORM\AbstractQuery#disableResultCache()` methods

Method `Doctrine\ORM\AbstractQuery#useResultCache()` which could be used for both enabling and disabling the cache
(depending on passed flag) was split into two.

## Minor BC BREAK: paginator output walkers aren't be called anymore on sub-queries for queries without max results

To optimize DB interaction, `Doctrine\ORM\Tools\Pagination\Paginator` no longer fetches identifiers to be able to
perform the pagination with join collections when max results isn't set in the query.

## Minor BC BREAK: tables filtered with `schema_filter` are no longer created

When generating schema diffs, if a source table is filtered out by a `schema_filter` expression, then a `CREATE TABLE` was
always generated, even if the table already existed. This has been changed in this release and the table will no longer
be created.

## Deprecated number unaware `Doctrine\ORM\Mapping\UnderscoreNamingStrategy`

In the last patch of the `v2.6.x` series, we fixed a bug that was not converting names properly when they had numbers
(e.g.: `base64Encoded` was wrongly converted to `base64encoded` instead of `base64_encoded`).

In order to not break BC we've introduced a way to enable the fixed behavior using a boolean constructor argument. This
argument will be removed in 3.0 and the default behavior will be the fixed one.

## Deprecated: `Doctrine\ORM\AbstractQuery#useResultCache()`

Method `Doctrine\ORM\AbstractQuery#useResultCache()` is deprecated because it is split into `enableResultCache()`
and `disableResultCache()`. It will be removed in 3.0.

## Deprecated code generators and related console commands

These console commands have been deprecated:

 * `orm:convert-mapping`
 * `orm:generate:entities`
 * `orm:generate-repositories`

These classes have been deprecated:

 * `Doctrine\ORM\Tools\EntityGenerator`
 * `Doctrine\ORM\Tools\EntityRepositoryGenerator`

Whole Doctrine\ORM\Tools\Export namespace with all its members have been deprecated as well.

## Deprecated `Doctrine\ORM\Proxy\Proxy` marker interface

Proxy objects in Doctrine ORM 3.0 will no longer implement `Doctrine\ORM\Proxy\Proxy` nor
`Doctrine\Persistence\Proxy`: instead, they implement
`ProxyManager\Proxy\GhostObjectInterface`.

These related classes have been deprecated:

 * `Doctrine\ORM\Proxy\ProxyFactory`
 * `Doctrine\ORM\Proxy\Autoloader` - we suggest using the composer autoloader instead

These methods have been deprecated:

 * `Doctrine\ORM\Configuration#getAutoGenerateProxyClasses()`
 * `Doctrine\ORM\Configuration#getProxyDir()`
 * `Doctrine\ORM\Configuration#getProxyNamespace()`

## Deprecated `Doctrine\ORM\Version`

The `Doctrine\ORM\Version` class is now deprecated and will be removed in Doctrine ORM 3.0:
please refrain from checking the ORM version at runtime or use Composer's [runtime API](https://getcomposer.org/doc/07-runtime.md#knowing-whether-package-x-is-installed-in-version-y).

## Deprecated `EntityManager#merge()` method

Merge semantics was a poor fit for the PHP "share-nothing" architecture.
In addition to that, merging caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.

The following API methods were therefore deprecated:

* `EntityManager#merge()`
* `UnitOfWork#merge()`

An alternative to `EntityManager#merge()` will not be provided by ORM 3.0, since the merging
semantics should be part of the business domain rather than the persistence domain of an
application. If your application relies heavily on CRUD-alike interactions and/or `PATCH`
restful operations, you should look at alternatives such as [JMSSerializer](https://github.com/schmittjoh/serializer).

## Extending `EntityManager` is deprecated

Final keyword will be added to the `EntityManager::class` in Doctrine ORM 3.0 in order to ensure that EntityManager
 is not used as valid extension point. Valid extension point should be EntityManagerInterface.

## Deprecated `EntityManager#clear($entityName)`

If your code relies on clearing a single entity type via `EntityManager#clear($entityName)`,
the signature has been changed to `EntityManager#clear()`.

The main reason is that partial clears caused multiple issues with data integrity
in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios.

## Deprecated `EntityManager#flush($entity)` and `EntityManager#flush($entities)`

If your code relies on single entity flushing optimisations via
`EntityManager#flush($entity)`, the signature has been changed to
`EntityManager#flush()`.

Said API was affected by multiple data integrity bugs due to the fact
that change tracking was being restricted upon a subset of the managed
entities. The ORM cannot support committing subsets of the managed
entities while also guaranteeing data integrity, therefore this
utility was removed.

The `flush()` semantics will remain the same, but the change tracking will be performed
on all entities managed by the unit of work, and not just on the provided
`$entity` or `$entities`, as the parameter is now completely ignored.

The same applies to `UnitOfWork#commit($entity)`, which will simply be
`UnitOfWork#commit()`.

If you would still like to perform batching operations over small `UnitOfWork`
instances, it is suggested to follow these paths instead:

 * eagerly use `EntityManager#clear()` in conjunction with a specific second level
   cache configuration (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/second-level-cache.html)
 * use an explicit change tracking policy (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/change-tracking-policies.html)

## Deprecated `YAML` mapping drivers.

If your code relies on `YamlDriver`  or `SimpleYamlDriver`, you **MUST** change to
annotation or XML drivers instead.

## Deprecated: `Doctrine\ORM\EntityManagerInterface#copy()`

Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is deprecated.
It will be removed in 3.0.

# Upgrade to 2.6

## Added `Doctrine\ORM\EntityRepository::count()` method

`Doctrine\ORM\EntityRepository::count()` has been added. This new method has different
signature than `Countable::count()` (required parameter) and therefore are not compatible.
If your repository implemented the `Countable` interface, you will have to use
`$repository->count([])` instead and not implement `Countable` interface anymore.

## Minor BC BREAK: `Doctrine\ORM\Tools\Console\ConsoleRunner` is now final

Since it's just an utilitarian class and should not be inherited.

## Minor BC BREAK: removed `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()`

Method `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()`
now has a required parameter `$pathExpr`.

## Minor BC BREAK: removed `Doctrine\ORM\Query\Parser#isInternalFunction()`

Method `Doctrine\ORM\Query\Parser#isInternalFunction()` was removed because
the distinction between internal function and user defined DQL was removed.
[#6500](https://github.com/doctrine/orm/pull/6500)

## Minor BC BREAK: removed `Doctrine\ORM\ORMException#overwriteInternalDQLFunctionNotAllowed()`

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/orm/pull/6500)

## PHP 7.1 is now required

Doctrine 2.6 now requires PHP 7.1 or newer.

As a consequence, automatic cache setup in Doctrine\ORM\Tools\Setup::create*Configuration() was changed:
- APCu extension (ext-apcu) will now be used instead of abandoned APC (ext-apc).
- Memcached extension (ext-memcached) will be used instead of obsolete Memcache (ext-memcache).
- XCache support was dropped as it doesn't work with PHP 7.

# Upgrade to 2.5

## Minor BC BREAK: removed `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()`

Method `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()` was unused and part
of the internal API of the ORM, so it was removed. [#5600](https://github.com/doctrine/orm/pull/5600).

## Minor BC BREAK: removed $className parameter on `AbstractEntityInheritancePersister#getSelectJoinColumnSQL()`

As `$className` parameter was not used in the method, it was safely removed.

## Minor BC BREAK: query cache key time is now a float

As of 2.5.5, the `QueryCacheEntry#time` property will contain a float value
instead of an integer in order to have more precision and also to be consistent
with the `TimestampCacheEntry#time`.

## Minor BC BREAK: discriminator map must now include all non-transient classes

It is now required that you declare the root of an inheritance in the
discriminator map.

When declaring an inheritance map, it was previously possible to skip the root
of the inheritance in the discriminator map. This was actually a validation
mistake by Doctrine2 and led to problems when trying to persist instances of
that class.

If you don't plan to persist instances some classes in your inheritance, then
either:

 - make those classes `abstract`
 - map those classes as `MappedSuperclass`

## Minor BC BREAK: ``EntityManagerInterface`` instead of ``EntityManager`` in type-hints

As of 2.5, classes requiring the ``EntityManager`` in any method signature will now require
an ``EntityManagerInterface`` instead.
If you are extending any of the following classes, then you need to check following
signatures:

- ``Doctrine\ORM\Tools\DebugUnitOfWorkListener#dumpIdentityMap(EntityManagerInterface $em)``
- ``Doctrine\ORM\Mapping\ClassMetadataFactory#setEntityManager(EntityManagerInterface $em)``

## Minor BC BREAK: Custom Hydrators API change

As of 2.5, `AbstractHydrator` does not enforce the usage of cache as part of
API, and now provides you a clean API for column information through the method
`hydrateColumnInfo($column)`.
Cache variable being passed around by reference is no longer needed since
Hydrators are per query instantiated since Doctrine 2.4.

## Minor BC BREAK: Entity based ``EntityManager#clear()`` calls follow cascade detach

Whenever ``EntityManager#clear()`` method gets called with a given entity class
name, until 2.4, it was only detaching the specific requested entity.
As of 2.5, ``EntityManager`` will follow configured cascades, providing a better
memory management since associations will be garbage collected, optimizing
resources consumption on long running jobs.

## BC BREAK: NamingStrategy interface changes

1. A new method ``embeddedFieldToColumnName($propertyName, $embeddedColumnName)``

This method generates the column name for fields of embedded objects. If you implement your custom NamingStrategy, you
now also need to implement this new method.

2. A change to method ``joinColumnName()`` to include the $className

## Updates on entities scheduled for deletion are no longer processed

In Doctrine 2.4, if you modified properties of an entity scheduled for deletion, UnitOfWork would
produce an UPDATE statement to be executed right before the DELETE statement. The entity in question
was therefore present in ``UnitOfWork#entityUpdates``, which means that ``preUpdate`` and ``postUpdate``
listeners were (quite pointlessly) called. In ``preFlush`` listeners, it used to be possible to undo
the scheduled deletion for updated entities (by calling ``persist()`` if the entity was found in both
``entityUpdates`` and ``entityDeletions``). This does not work any longer, because the entire changeset
calculation logic is optimized away.

## Minor BC BREAK: Default lock mode changed from LockMode::NONE to null in method signatures

A misconception concerning default lock mode values in method signatures lead to unexpected behaviour
in SQL statements on SQL Server. With a default lock mode of ``LockMode::NONE`` throughout the
method signatures in ORM, the table lock hint ``WITH (NOLOCK)`` was appended to all locking related
queries by default. This could result in unpredictable results because an explicit ``WITH (NOLOCK)``
table hint tells SQL Server to run a specific query in transaction isolation level READ UNCOMMITTED
instead of the default READ COMMITTED transaction isolation level.
Therefore there now is a distinction between ``LockMode::NONE`` and ``null`` to be able to tell
Doctrine whether to add table lock hints to queries by intention or not. To achieve this, the following
method signatures have been changed to declare ``$lockMode = null`` instead of ``$lockMode = LockMode::NONE``:

- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#load()``
- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#refresh()``
- ``Doctrine\ORM\Decorator\EntityManagerDecorator#find()``
- ``Doctrine\ORM\EntityManager#find()``
- ``Doctrine\ORM\EntityRepository#find()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#load()``
- ``Doctrine\ORM\Persisters\BasicEntityPersister#refresh()``
- ``Doctrine\ORM\Persisters\EntityPersister#getSelectSQL()``
- ``Doctrine\ORM\Persisters\EntityPersister#load()``
- ``Doctrine\ORM\Persisters\EntityPersister#refresh()``
- ``Doctrine\ORM\Persisters\JoinedSubclassPersister#getSelectSQL()``

You should update signatures for these methods if you have subclassed one of the above classes.
Please also check the calling code of these methods in your application and update if necessary.

**Note:**
This in fact is really a minor BC BREAK and should not have any affect on database vendors
other than SQL Server because it is the only one that supports and therefore cares about
``LockMode::NONE``. It's really just a FIX for SQL Server environments using ORM.

## Minor BC BREAK: `__clone` method not called anymore when entities are instantiated via metadata API

As of PHP 5.6, instantiation of new entities is deferred to the
[`doctrine/instantiator`](https://github.com/doctrine/instantiator) library, which will avoid calling `__clone`
or any public API on instantiated objects.

## BC BREAK: `Doctrine\ORM\Repository\DefaultRepositoryFactory` is now `final`

Please implement the `Doctrine\ORM\Repository\RepositoryFactory` interface instead of extending
the `Doctrine\ORM\Repository\DefaultRepositoryFactory`.

## BC BREAK: New object expression DQL queries now respects user provided aliasing and not return consumed fields

When executing DQL queries with new object expressions, instead of returning DTOs numerically indexes, it will now respect user provided aliases. Consider the following query:

    SELECT new UserDTO(u.id,u.name) as user,new AddressDTO(a.street,a.postalCode) as address, a.id as addressId FROM User u INNER JOIN u.addresses a WITH a.isPrimary = true

Previously, your result would be similar to this:

    array(
        0=>array(
            0=>{UserDTO object},
            1=>{AddressDTO object},
            2=>{u.id scalar},
            3=>{u.name scalar},
            4=>{a.street scalar},
            5=>{a.postalCode scalar},
            'addressId'=>{a.id scalar},
        ),
        ...
    )

From now on, the resultset will look like this:

    array(
        0=>array(
            'user'=>{UserDTO object},
            'address'=>{AddressDTO object},
            'addressId'=>{a.id scalar}
        ),
        ...
    )

## Minor BC BREAK: added second parameter $indexBy in EntityRepository#createQueryBuilder method signature

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()

In Doctrine 2.3 it was possible to use the new ``matching($criteria)``
functionality by adding constraints for assocations based on ID:

    Criteria::expr()->eq('association', $assocation->getId());

This functionality does not work on InMemory collections however, because
in memory criteria compares object values based on reference.
As of 2.4 the above code will throw an exception. You need to change
offending code to pass the ``$assocation`` reference directly:

    Criteria::expr()->eq('association', $assocation);

## Composer is now the default autoloader

The test suite now runs with composer autoloading. Support for PEAR, and tarball autoloading is deprecated.
Support for GIT submodules is removed.

## OnFlush and PostFlush event always called

Before 2.4 the postFlush and onFlush events were only called when there were
actually entities that changed. Now these events are called no matter if there
are entities in the UoW or changes are found.

## Parenthesis are now considered in arithmetic expression

Before 2.4 parenthesis are not considered in arithmetic primary expression.
That's conceptually wrong, since it might result in wrong values. For example:

The DQL:

    SELECT 100 / ( 2 * 2 ) FROM MyEntity

Before 2.4 it generates the SQL:

    SELECT 100 / 2 * 2 FROM my_entity

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

The new feature to detect discriminator maps automatically when none
are provided breaks userland implementations doing this with a
listener in ``loadClassMetadata`` event.

## EntityManager#find() not calls EntityRepository#find() anymore

Previous to 2.3, calling ``EntityManager#find()`` would be delegated to
``EntityRepository#find()``.  This has lead to some unexpected behavior in the
core of Doctrine when people have overwritten the find method in their
repositories. That is why this behavior has been reversed in 2.3, and
``EntityRepository#find()`` calls ``EntityManager#find()`` instead.

## EntityGenerator add*() method generation

When generating an add*() method for a collection the EntityGenerator will now not
use the Type-Hint to get the singular for the collection name, but use the field-name
and strip a trailing "s" character if there is one.

## Merge copies non persisted properties too

When merging an entity in UoW not only mapped properties are copied, but also others.

## Query, QueryBuilder and NativeQuery parameters *BC break*

From now on, parameters in queries is an ArrayCollection instead of a simple array.
This affects heavily the usage of setParameters(), because it will not append anymore
parameters to query, but will actually override the already defined ones.
Whenever you are retrieving a parameter (ie. $query->getParameter(1)), you will
receive an instance of Query\Parameter, which contains the methods "getName",
"getValue" and "getType". Parameters are also only converted to when necessary, and
not when they are set.

Also, related functions were affected:

* execute($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* iterate($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* setParameters($parameters) the argument $parameters can be either an key=>value array or an ArrayCollection instance
* getParameters() now returns ArrayCollection instead of array
* getParameter($key) now returns Parameter instance instead of parameter value

## Query TreeWalker method renamed

Internal changes were made to DQL and SQL generation. If you have implemented your own TreeWalker,
you probably need to update it. The method walkJoinVariableDeclaration is now named walkJoin.

## New methods in TreeWalker interface *BC break*

Two methods getQueryComponents() and setQueryComponent() were added to the TreeWalker interface and all its implementations
including TreeWalkerAdapter, TreeWalkerChain and SqlWalker. If you have your own implementation not inheriting from one of the
above you must implement these new methods.

## Metadata Drivers

Metadata drivers have been rewritten to reuse code from `Doctrine\Persistence`. Anyone who is using the
`Doctrine\ORM\Mapping\Driver\Driver` interface should instead refer to
`Doctrine\Persistence\Mapping\Driver\MappingDriver`. Same applies to
`Doctrine\ORM\Mapping\Driver\AbstractFileDriver`: you should now refer to
`Doctrine\Persistence\Mapping\Driver\FileDriver`.

Also, following mapping drivers have been deprecated, please use their replacements in Doctrine\Common as listed:

 *  `Doctrine\ORM\Mapping\Driver\DriverChain`       => `Doctrine\Persistence\Mapping\Driver\MappingDriverChain`
 *  `Doctrine\ORM\Mapping\Driver\PHPDriver`         => `Doctrine\Persistence\Mapping\Driver\PHPDriver`
 *  `Doctrine\ORM\Mapping\Driver\StaticPHPDriver`   => `Doctrine\Persistence\Mapping\Driver\StaticPHPDriver`

# Upgrade to 2.2

## ResultCache implementation rewritten

The result cache is completely rewritten and now works on the database result level, not inside the ORM AbstractQuery
anymore. This means that for result cached queries the hydration will now always be performed again, regardless of
the hydration mode. Affected areas are:

1. Fixes the problem that entities coming from the result cache were not registered in the UnitOfWork
   leading to problems during EntityManager#flush. Calls to EntityManager#merge are not necessary anymore.
2. Affects the array hydrator which now includes the overhead of hydration compared to caching the final result.

The API is backwards compatible however most of the getter methods on the `AbstractQuery` object are now
deprecated in favor of calling AbstractQuery#getQueryCacheProfile(). This method returns a `Doctrine\DBAL\Cache\QueryCacheProfile`
instance with access to result cache driver, lifetime and cache key.


## EntityManager#getPartialReference() creates read-only entity

Entities returned from EntityManager#getPartialReference() are now marked as read-only if they
haven't been in the identity map before. This means objects of this kind never lead to changes
in the UnitOfWork.


## Fields omitted in a partial DQL query or a native query are never updated

Fields of an entity that are not returned from a partial DQL Query or native SQL query
will never be updated through an UPDATE statement.


## Removed support for onUpdate in @JoinColumn

The onUpdate foreign key handling makes absolutely no sense in an ORM. Additionally Oracle doesn't even support it. Support for it is removed.


## Changes in Annotation Handling

There have been some changes to the annotation handling in Common 2.2 again, that affect how people with old configurations
from 2.0 have to configure the annotation driver if they don't use `Configuration::newDefaultAnnotationDriver()`:

    // Register the ORM Annotations in the AnnotationRegistry
    AnnotationRegistry::registerFile('path/to/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');

    $reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader();
    $reader->addNamespace('Doctrine\ORM\Mapping');
    $reader = new \Doctrine\Common\Annotations\CachedReader($reader, new ArrayCache());

    $driver = new AnnotationDriver($reader, (array)$paths);

    $config->setMetadataDriverImpl($driver);


## Scalar mappings can now be omitted from DQL result

You are now allowed to mark scalar SELECT expressions as HIDDEN and they are not hydrated anymore.
Example:

SELECT u, SUM(a.id) AS HIDDEN numArticles FROM User u LEFT JOIN u.Articles a ORDER BY numArticles DESC HAVING numArticles > 10

Your result will be a collection of Users, and not an array with key 0 as User object instance and "numArticles" as the number of articles per user


## Map entities as scalars in DQL result

When hydrating to array or even a mixed result in object hydrator, previously you had the 0 index holding you entity instance.
You are now allowed to alias this, providing more flexibility for you code.
Example:

SELECT u AS user FROM User u

Will now return a collection of arrays with index "user" pointing to the User object instance.


## Performance optimizations

Thousands of lines were completely reviewed and optimized for best performance.
Removed redundancy and improved code readability made now internal Doctrine code easier to understand.
Also, Doctrine 2.2 now is around 10-15% faster than 2.1.

## EntityManager#find(null)

Previously EntityManager#find(null) returned null. It now throws an exception.

# Upgrade to 2.1

## Interface for EntityRepository

The EntityRepository now has an interface Doctrine\Persistence\ObjectRepository. This means that your classes that override EntityRepository and extend find(), findOneBy() or findBy() must be adjusted to follow this interface.

## AnnotationReader changes

The annotation reader was heavily refactored between 2.0 and 2.1-RC1. In theory the operation of the new reader should be backwards compatible, but it has to be setup differently to work that way:

    // new call to the AnnotationRegistry
    \Doctrine\Common\Annotations\AnnotationRegistry::registerFile('/doctrine-src/src/Mapping/Driver/DoctrineAnnotations.php');

    $reader = new \Doctrine\Common\Annotations\AnnotationReader();
    $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
    // new code necessary starting here
    $reader->setIgnoreNotImportedAnnotations(true);
    $reader->setEnableParsePhpImports(false);
    $reader = new \Doctrine\Common\Annotations\CachedReader(
        new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache()
    );

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 <change-tracking-policy /> element demoted to attribute

We changed how the XML Driver allows to define the change-tracking-policy. The working case is now:

    <entity change-tracking-policy="DEFERRED_IMPLICT" />

# Update from 2.0-BETA2 to 2.0-BETA3

## Serialization of Uninitialized Proxies

As of Beta3 you can now serialize uninitialized proxies, an exception will only be thrown when
trying to access methods on the unserialized proxy as long as it has not been re-attached to the
EntityManager using `EntityManager#merge()`. See this example:

    $proxy = $em->getReference('User', 1);

    $serializedProxy = serialize($proxy);
    $detachedProxy = unserialized($serializedProxy);

    echo $em->contains($detachedProxy); // FALSE

    try {
        $detachedProxy->getId(); // uninitialized detached proxy
    } catch(Exception $e) {

    }
    $attachedProxy = $em->merge($detachedProxy);
    echo $attackedProxy->getId(); // works!

## Changed SQL implementation of Postgres and Oracle DateTime types

The DBAL Type "datetime" included the Timezone Offset in both Postgres and Oracle. As of this version they are now
generated without Timezone (TIMESTAMP WITHOUT TIME ZONE instead of TIMESTAMP WITH TIME ZONE).
See [this comment to Ticket DBAL-22](http://www.doctrine-project.org/jira/browse/DBAL-22?focusedCommentId=13396&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_13396)
for more details as well as migration issues for PostgreSQL and Oracle.

Both Postgres and Oracle will throw Exceptions during hydration of Objects with "DateTime" fields unless migration steps are taken!

## Removed multi-dot/deep-path expressions in DQL

The support for implicit joins in DQL through the multi-dot/Deep Path Expressions
was dropped. For example:

    SELECT u FROM User u WHERE u.group.name = ?1

See the "u.group.id" here is using multi dots (deep expression) to walk
through the graph of objects and properties. Internally the DQL parser
would rewrite these queries to:

    SELECT u FROM User u JOIN u.group g WHERE g.name = ?1

This explicit notation will be the only supported notation as of now. The internal
handling of multi-dots in the DQL Parser was very complex, error prone in edge cases
and required special treatment for several features we added. Additionally
it had edge cases that could not be solved without making the DQL Parser
even much more complex. For this reason we will drop the support for the
deep path expressions to increase maintainability and overall performance
of the DQL parsing process. This will benefit any DQL query being parsed,
even those not using deep path expressions.

Note that the generated SQL of both notations is exactly the same! You
don't loose anything through this.

## Default Allocation Size for Sequences

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

Instead of accessing protected variables for the EntityManager in
a custom EntityRepository it is now required to use the getter methods
for all the three instance variables:

* `$this->_em` now accessible through `$this->getEntityManager()`
* `$this->_class` now accessible through `$this->getClassMetadata()`
* `$this->_entityName` now accessible through `$this->getEntityName()`

Important: For Beta 2 the protected visibility of these three properties will be
changed to private!

## Console migrated to Symfony Console

The Doctrine CLI has been replaced by Symfony Console Configuration

Instead of having to specify:

    [php]
    $cliConfig = new CliConfiguration();
    $cliConfig->setAttribute('em', $entityManager);

You now have to configure the script like:

    [php]
    $helperSet = new \Symfony\Components\Console\Helper\HelperSet(array(
        'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
        'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
    ));

## Console: No need for Mapping Paths anymore

In previous versions you had to specify the --from and --from-path options
to show where your mapping paths are from the console. However this information
is already known from the Mapping Driver configuration, so the requirement
for this options were dropped.

Instead for each console command all the entities are loaded and to
restrict the operation to one or more sub-groups you can use the --filter flag.

## AnnotationDriver is not a default mapping driver anymore

In conjunction with the recent changes to Console we realized that the
annotations driver being a default metadata driver lead to lots of glue
code in the console components to detect where entities lie and how to load
them for batch updates like SchemaTool and other commands. However the
annotations driver being a default driver does not really help that much
anyways.

Therefore we decided to break backwards compatibility in this issue and drop
the support for Annotations as Default Driver and require our users to
specify the driver explicitly (which allows us to ask for the path to all
entities).

If you are using the annotations metadata driver as default driver, you
have to add the following lines to your bootstrap code:

    $driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__."/Entities"));
    $config->setMetadataDriverImpl($driverImpl);

You have to specify the path to your entities as either string of a single
path or array of multiple paths
to your entities. This information will be used by all console commands to
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
'inversedBy' attribute that points to the name of the field on the inverse side that completes
the association. Example:

    [php]
    // BEFORE (ALPHA4 AND EARLIER)
    class User
    {
        //...
        /** @OneToOne(targetEntity="Address", mappedBy="user") */
        private $address;
        //...
    }
    class Address
    {
        //...
        /** @OneToOne(targetEntity="User") */
        private $user;
        //...
    }

    // SINCE BETA1
    // User class DOES NOT CHANGE
    class Address
    {
        //...
        /** @OneToOne(targetEntity="User", inversedBy="address") */
        private $user;
        //...
    }

Thus, the inversedBy attribute is the counterpart to the mappedBy attribute. This change
was necessary to enable some simplifications and further performance improvements. We
apologize for the inconvenience.

## Default Property for Field Mappings

The "default" option for database column defaults has been removed. If desired, database column defaults can
be implemented by using the columnDefinition attribute of the @Column annotation (or the appropriate XML and YAML equivalents).
Prefer PHP default values, if possible.

## Selecting Partial Objects

Querying for partial objects now has a new syntax. The old syntax to query for partial objects
now has a different meaning. This is best illustrated by an example. If you previously
had a DQL query like this:

    [sql]
    SELECT u.id, u.name FROM User u

Since BETA1, simple state field path expressions in the select clause are used to select
object fields as plain scalar values (something that was not possible before).
To achieve the same result as previously (that is, a partial object with only id and name populated)
you need to use the following, explicit syntax:

    [sql]
    SELECT PARTIAL u.{id,name} FROM User u

## XML Mapping Driver

The 'inheritance-type' attribute changed to take last bit of ClassMetadata constant names, i.e.
NONE, SINGLE_TABLE, INHERITANCE_TYPE_JOINED

## YAML Mapping Driver

The way to specify lifecycle callbacks in YAML Mapping driver was changed to allow for multiple callbacks
per event. The Old syntax ways:

    [yaml]
    lifecycleCallbacks:
      doStuffOnPrePersist: prePersist
      doStuffOnPostPersist: postPersist

The new syntax is:

    [yaml]
    lifecycleCallbacks:
      prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ]
      postPersist: [ doStuffOnPostPersist ]

## PreUpdate Event Listeners

Event Listeners listening to the 'preUpdate' event can only affect the primitive values of entity changesets
by using the API on the `PreUpdateEventArgs` instance passed to the preUpdate listener method. Any changes
to the state of the entitys properties won't affect the database UPDATE statement anymore. This gives drastic
performance benefits for the preUpdate event.

## Collection API

The Collection interface in the Common package has been updated with some missing methods
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

CLI main object changed its name and namespace. Renamed from Doctrine\ORM\Tools\Cli to Doctrine\Common\Cli\CliController.
Doctrine\Common\Cli\CliController now only deals with namespaces. Ready to go, Core, Dbal and Orm are available and you can subscribe new tasks by retrieving the namespace and including new task. Example:

    [php]
    $cli->getNamespace('Core')->addTask('my-example', '\MyProject\Tools\Cli\Tasks\MyExampleTask');


## CLI Tasks documentation

Tasks have implemented a new way to build documentation. Although it is still possible to define the help manually by extending the basicHelp and extendedHelp, they are now optional.
With new required method AbstractTask::buildDocumentation, its implementation defines the TaskDocumentation instance (accessible through AbstractTask::getDocumentation()), basicHelp and extendedHelp are now not necessary to be implemented.

## Changes in Method Signatures

    * A bunch of Methods on both Doctrine\DBAL\Platforms\AbstractPlatform and Doctrine\DBAL\Schema\AbstractSchemaManager
      have changed quite significantly by adopting the new Schema instance objects.

## Renamed Methods

    * Doctrine\ORM\AbstractQuery::setExpireResultCache() -> expireResultCache()
    * Doctrine\ORM\Query::setExpireQueryCache() -> expireQueryCache()

## SchemaTool Changes

    * "doctrine schema-tool --drop" now always drops the complete database instead of
    only those tables defined by the current database model. The previous method had
    problems when foreign keys of orphaned tables pointed to tables that were scheduled
    for deletion.
    * Use "doctrine schema-tool --update" to get a save incremental update for your
    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
to upgrade your projects to use this version.

## CLI Changes

The $args variable used in the cli-config.php for configuring the Doctrine CLI has been renamed to $globalArguments.

## Proxy class changes

You are now required to make supply some minimalist configuration with regards to proxy objects. That involves 2 new configuration options. First, the directory where generated proxy classes should be placed needs to be specified. Secondly, you need to configure the namespace used for proxy classes. The following snippet shows an example:

    [php]
    // step 1: configure directory for proxy classes
    // $config instanceof Doctrine\ORM\Configuration
    $config->setProxyDir('/path/to/myproject/lib/MyProject/Generated/Proxies');
    $config->setProxyNamespace('MyProject\Generated\Proxies');

Note that proxy classes behave exactly like any other classes when it comes to class loading. Therefore you need to make sure the proxy classes can be loaded by some class loader. If you place the generated proxy classes in a namespace and directory under your projects class files, like in the example above, it would be sufficient to register the MyProject namespace on a class loader. Since the proxy classes are contained in that namespace and adhere to the standards for class loading, no additional work is required.
Generating the proxy classes into a namespace within your class library is the recommended setup.

Entities with initialized proxy objects can now be serialized and unserialized properly from within the same application.

For more details refer to the Configuration section of the manual.

## Removed allowPartialObjects configuration option

The allowPartialObjects configuration option together with the `Configuration#getAllowPartialObjects` and `Configuration#setAllowPartialObjects` methods have been removed.
The new behavior is as if the option were set to FALSE all the time, basically disallowing partial objects globally. However, you can still use the `Query::HINT_FORCE_PARTIAL_LOAD` query hint to force a query to return partial objects for optimization purposes.

## Renamed Methods

* Doctrine\ORM\Configuration#getCacheDir() to getProxyDir()
* Doctrine\ORM\Configuration#setCacheDir($dir) to setProxyDir($dir)


================================================
FILE: ci/github/phpunit/mysqli.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <var name="db_driver" value="mysqli"/>
        <var name="db_host" value="127.0.0.1" />
        <var name="db_port" value="3306"/>
        <var name="db_user" value="root" />
        <var name="db_dbname" value="doctrine_tests" />
        <var name="db_default_table_option_charset" value="utf8mb4" />
        <var name="db_default_table_option_collation" value="utf8mb4_unicode_ci" />
        <var name="db_default_table_option_engine" value="InnoDB" />

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: ci/github/phpunit/pdo_mysql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <var name="db_driver" value="pdo_mysql"/>
        <var name="db_host" value="127.0.0.1" />
        <var name="db_port" value="3306"/>
        <var name="db_user" value="root" />
        <var name="db_dbname" value="doctrine_tests" />
        <var name="db_default_table_option_charset" value="utf8mb4" />
        <var name="db_default_table_option_collation" value="utf8mb4_unicode_ci" />
        <var name="db_default_table_option_engine" value="InnoDB" />

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: ci/github/phpunit/pdo_pgsql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <var name="db_driver" value="pdo_pgsql"/>
        <var name="db_host" value="localhost" />
        <var name="db_user" value="postgres" />
        <var name="db_password" value="postgres" />
        <var name="db_dbname" value="doctrine_tests" />

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: ci/github/phpunit/pdo_sqlite.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <!-- use an in-memory sqlite database -->
        <var name="db_driver" value="pdo_sqlite"/>
        <var name="db_memory" value="true"/>

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: ci/github/phpunit/pgsql.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <var name="db_driver" value="pgsql"/>
        <var name="db_host" value="localhost" />
        <var name="db_user" value="postgres" />
        <var name="db_password" value="postgres" />
        <var name="db_dbname" value="doctrine_tests" />

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: ci/github/phpunit/sqlite3.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../vendor/phpunit/phpunit/phpunit.xsd"
         colors="true"
         beStrictAboutOutputDuringTests="true"
         displayDetailsOnTestsThatTriggerDeprecations="true"
         displayDetailsOnTestsThatTriggerNotices="true"
         displayDetailsOnTestsThatTriggerWarnings="true"
         failOnNotice="true"
         failOnWarning="true"
         failOnRisky="true"
         cacheDirectory=".phpunit.cache"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <!-- use an in-memory sqlite database -->
        <var name="db_driver" value="sqlite3"/>
        <var name="db_memory" value="true"/>

        <!-- necessary change for some CLI/console output test assertions -->
        <env name="COLUMNS" value="120"/>
        <env name="DOCTRINE_DEPRECATIONS" value="trigger"/>
    </php>

    <testsuites>
        <testsuite name="Doctrine DBAL Test Suite">
            <directory>../../../tests</directory>
        </testsuite>
    </testsuites>

    <source ignoreSuppressionOfDeprecations="true">
        <include>
            <directory suffix=".php">../../../src</directory>
        </include>
    </source>

    <groups>
        <exclude>
            <group>performance</group>
            <group>locking_functional</group>
        </exclude>
    </groups>
</phpunit>


================================================
FILE: composer.json
================================================
{
    "name": "doctrine/orm",
    "description": "Object-Relational-Mapper for PHP",
    "license": "MIT",
    "type": "library",
    "keywords": [
        "orm",
        "database"
    ],
    "authors": [
        {
            "name": "Guilherme Blanco",
            "email": "guilhermeblanco@gmail.com"
        },
        {
            "name": "Roman Borschel",
            "email": "roman@code-factory.org"
        },
        {
            "name": "Benjamin Eberlei",
            "email": "kontakt@beberlei.de"
        },
        {
            "name": "Jonathan Wage",
            "email": "jonwage@gmail.com"
        },
        {
            "name": "Marco Pivetta",
            "email": "ocramius@gmail.com"
        }
    ],
    "homepage": "https://www.doctrine-project.org/projects/orm.html",
    "require": {
        "php": "^8.1",
        "ext-ctype": "*",
        "composer-runtime-api": "^2",
        "doctrine/collections": "^2.2",
        "doctrine/dbal": "^3.8.2 || ^4",
        "doctrine/deprecations": "^0.5.3 || ^1",
        "doctrine/event-manager": "^1.2 || ^2",
        "doctrine/inflector": "^1.4 || ^2.0",
        "doctrine/instantiator": "^1.3 || ^2",
        "doctrine/lexer": "^3",
        "doctrine/persistence": "^3.3.1 || ^4",
        "psr/cache": "^1 || ^2 || ^3",
        "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0",
        "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0"
    },
    "require-dev": {
        "doctrine/coding-standard": "^14.0",
        "phpbench/phpbench": "^1.0",
        "phpstan/extension-installer": "^1.4",
        "phpstan/phpstan": "2.1.23",
        "phpstan/phpstan-deprecation-rules": "^2",
        "phpunit/phpunit": "^10.5.0 || ^11.5",
        "psr/log": "^1 || ^2 || ^3",
        "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0"
    },
    "suggest": {
        "ext-dom": "Provides support for XSD validation for XML mapping files",
        "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0"
    },
    "autoload": {
        "psr-4": {
            "Doctrine\\ORM\\": "src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Doctrine\\Performance\\": "tests/Performance",
            "Doctrine\\StaticAnalysis\\": "tests/StaticAnalysis",
            "Doctrine\\Tests\\": "tests/Tests"
        }
    },
    "config": {
        "allow-plugins": {
            "composer/package-versions-deprecated": true,
            "dealerdirect/phpcodesniffer-composer-installer": true,
            "phpstan/extension-installer": true
        },
        "sort-packages": true
    },
    "scripts": {
        "docs": "composer --working-dir docs update && ./docs/vendor/bin/build-docs.sh @additional_args"
    }
}


================================================
FILE: docs/.gitignore
================================================
composer.lock
vendor/
output/


================================================
FILE: docs/LICENSE.md
================================================
The Doctrine ORM documentation is licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US)

Creative Commons Legal Code

Attribution-NonCommercial-ShareAlike 3.0 Unported

    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
    LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
    REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
    DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.

1. Definitions

 a. "Adaptation" means a work based upon the Work, or upon the Work and
    other pre-existing works, such as a translation, adaptation,
    derivative work, arrangement of music or other alterations of a
    literary or artistic work, or phonogram or performance and includes
    cinematographic adaptations or any other form in which the Work may be
    recast, transformed, or adapted including in any form recognizably
    derived from the original, except that a work that constitutes a
    Collection will not be considered an Adaptation for the purpose of
    this License. For the avoidance of doubt, where the Work is a musical
    work, performance or phonogram, the synchronization of the Work in
    timed-relation with a moving image ("synching") will be considered an
    Adaptation for the purpose of this License.
 b. "Collection" means a collection of literary or artistic works, such as
    encyclopedias and anthologies, or performances, phonograms or
    broadcasts, or other works or subject matter other than works listed
    in Section 1(g) below, which, by reason of the selection and
    arrangement of their contents, constitute intellectual creations, in
    which the Work is included in its entirety in unmodified form along
    with one or more other contributions, each constituting separate and
    independent works in themselves, which together are assembled into a
    collective whole. A work that constitutes a Collection will not be
    considered an Adaptation (as defined above) for the purposes of this
    License.
 c. "Distribute" means to make available to the public the original and
    copies of the Work or Adaptation, as appropriate, through sale or
    other transfer of ownership.
 d. "License Elements" means the following high-level license attributes
    as selected by Licensor and indicated in the title of this License:
    Attribution, Noncommercial, ShareAlike.
 e. "Licensor" means the individual, individuals, entity or entities that
    offer(s) the Work under the terms of this License.
 f. "Original Author" means, in the case of a literary or artistic work,
    the individual, individuals, entity or entities who created the Work
    or if no individual or entity can be identified, the publisher; and in
    addition (i) in the case of a performance the actors, singers,
    musicians, dancers, and other persons who act, sing, deliver, declaim,
    play in, interpret or otherwise perform literary or artistic works or
    expressions of folklore; (ii) in the case of a phonogram the producer
    being the person or legal entity who first fixes the sounds of a
    performance or other sounds; and, (iii) in the case of broadcasts, the
    organization that transmits the broadcast.
 g. "Work" means the literary and/or artistic work offered under the terms
    of this License including without limitation any production in the
    literary, scientific and artistic domain, whatever may be the mode or
    form of its expression including digital form, such as a book,
    pamphlet and other writing; a lecture, address, sermon or other work
    of the same nature; a dramatic or dramatico-musical work; a
    choreographic work or entertainment in dumb show; a musical
    composition with or without words; a cinematographic work to which are
    assimilated works expressed by a process analogous to cinematography;
    a work of drawing, painting, architecture, sculpture, engraving or
    lithography; a photographic work to which are assimilated works
    expressed by a process analogous to photography; a work of applied
    art; an illustration, map, plan, sketch or three-dimensional work
    relative to geography, topography, architecture or science; a
    performance; a broadcast; a phonogram; a compilation of data to the
    extent it is protected as a copyrightable work; or a work performed by
    a variety or circus performer to the extent it is not otherwise
    considered a literary or artistic work.
 h. "You" means an individual or entity exercising rights under this
    License who has not previously violated the terms of this License with
    respect to the Work, or who has received express permission from the
    Licensor to exercise rights under this License despite a previous
    violation.
 i. "Publicly Perform" means to perform public recitations of the Work and
    to communicate to the public those public recitations, by any means or
    process, including by wire or wireless means or public digital
    performances; to make available to the public Works in such a way that
    members of the public may access these Works from a place and at a
    place individually chosen by them; to perform the Work to the public
    by any means or process and the communication to the public of the
    performances of the Work, including by public digital performance; to
    broadcast and rebroadcast the Work by any means including signs,
    sounds or images.
 j. "Reproduce" means to make copies of the Work by any means including
    without limitation by sound or visual recordings and the right of
    fixation and reproducing fixations of the Work, including storage of a
    protected performance or phonogram in digital form or other electronic
    medium.

2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.

3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:

 a. to Reproduce the Work, to incorporate the Work into one or more
    Collections, and to Reproduce the Work as incorporated in the
    Collections;
 b. to create and Reproduce Adaptations provided that any such Adaptation,
    including any translation in any medium, takes reasonable steps to
    clearly label, demarcate or otherwise identify that changes were made
    to the original Work. For example, a translation could be marked "The
    original work was translated from English to Spanish," or a
    modification could indicate "The original work has been modified.";
 c. to Distribute and Publicly Perform the Work including as incorporated
    in Collections; and,
 d. to Distribute and Publicly Perform Adaptations.

The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights in
other media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved, including but not limited to the
rights described in Section 4(e).

4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:

 a. You may Distribute or Publicly Perform the Work only under the terms
    of this License. You must include a copy of, or the Uniform Resource
    Identifier (URI) for, this License with every copy of the Work You
    Distribute or Publicly Perform. You may not offer or impose any terms
    on the Work that restrict the terms of this License or the ability of
    the recipient of the Work to exercise the rights granted to that
    recipient under the terms of the License. You may not sublicense the
    Work. You must keep intact all notices that refer to this License and
    to the disclaimer of warranties with every copy of the Work You
    Distribute or Publicly Perform. When You Distribute or Publicly
    Perform the Work, You may not impose any effective technological
    measures on the Work that restrict the ability of a recipient of the
    Work from You to exercise the rights granted to that recipient under
    the terms of the License. This Section 4(a) applies to the Work as
    incorporated in a Collection, but this does not require the Collection
    apart from the Work itself to be made subject to the terms of this
    License. If You create a Collection, upon notice from any Licensor You
    must, to the extent practicable, remove from the Collection any credit
    as required by Section 4(d), as requested. If You create an
    Adaptation, upon notice from any Licensor You must, to the extent
    practicable, remove from the Adaptation any credit as required by
    Section 4(d), as requested.
 b. You may Distribute or Publicly Perform an Adaptation only under: (i)
    the terms of this License; (ii) a later version of this License with
    the same License Elements as this License; (iii) a Creative Commons
    jurisdiction license (either this or a later license version) that
    contains the same License Elements as this License (e.g.,
    Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License").
    You must include a copy of, or the URI, for Applicable License with
    every copy of each Adaptation You Distribute or Publicly Perform. You
    may not offer or impose any terms on the Adaptation that restrict the
    terms of the Applicable License or the ability of the recipient of the
    Adaptation to exercise the rights granted to that recipient under the
    terms of the Applicable License. You must keep intact all notices that
    refer to the Applicable License and to the disclaimer of warranties
    with every copy of the Work as included in the Adaptation You
    Distribute or Publicly Perform. When You Distribute or Publicly
    Perform the Adaptation, You may not impose any effective technological
    measures on the Adaptation that restrict the ability of a recipient of
    the Adaptation from You to exercise the rights granted to that
    recipient under the terms of the Applicable License. This Section 4(b)
    applies to the Adaptation as incorporated in a Collection, but this
    does not require the Collection apart from the Adaptation itself to be
    made subject to the terms of the Applicable License.
 c. You may not exercise any of the rights granted to You in Section 3
    above in any manner that is primarily intended for or directed toward
    commercial advantage or private monetary compensation. The exchange of
    the Work for other copyrighted works by means of digital file-sharing
    or otherwise shall not be considered to be intended for or directed
    toward commercial advantage or private monetary compensation, provided
    there is no payment of any monetary compensation in con-nection with
    the exchange of copyrighted works.
 d. If You Distribute, or Publicly Perform the Work or any Adaptations or
    Collections, You must, unless a request has been made pursuant to
    Section 4(a), keep intact all copyright notices for the Work and
    provide, reasonable to the medium or means You are utilizing: (i) the
    name of the Original Author (or pseudonym, if applicable) if supplied,
    and/or if the Original Author and/or Licensor designate another party
    or parties (e.g., a sponsor institute, publishing entity, journal) for
    attribution ("Attribution Parties") in Licensor's copyright notice,
    terms of service or by other reasonable means, the name of such party
    or parties; (ii) the title of the Work if supplied; (iii) to the
    extent reasonably practicable, the URI, if any, that Licensor
    specifies to be associated with the Work, unless such URI does not
    refer to the copyright notice or licensing information for the Work;
    and, (iv) consistent with Section 3(b), in the case of an Adaptation,
    a credit identifying the use of the Work in the Adaptation (e.g.,
    "French translation of the Work by Original Author," or "Screenplay
    based on original Work by Original Author"). The credit required by
    this Section 4(d) may be implemented in any reasonable manner;
    provided, however, that in the case of a Adaptation or Collection, at
    a minimum such credit will appear, if a credit for all contributing
    authors of the Adaptation or Collection appears, then as part of these
    credits and in a manner at least as prominent as the credits for the
    other contributing authors. For the avoidance of doubt, You may only
    use the credit required by this Section for the purpose of attribution
    in the manner set out above and, by exercising Your rights under this
    License, You may not implicitly or explicitly assert or imply any
    connection with, sponsorship or endorsement by the Original Author,
    Licensor and/or Attribution Parties, as appropriate, of You or Your
    use of the Work, without the separate, express prior written
    permission of the Original Author, Licensor and/or Attribution
    Parties.
 e. For the avoidance of doubt:

     i. Non-waivable Compulsory License Schemes. In those jurisdictions in
        which the right to collect royalties through any statutory or
        compulsory licensing scheme cannot be waived, the Licensor
        reserves the exclusive right to collect such royalties for any
        exercise by You of the rights granted under this License;
    ii. Waivable Compulsory License Schemes. In those jurisdictions in
        which the right to collect royalties through any statutory or
        compulsory licensing scheme can be waived, the Licensor reserves
        the exclusive right to collect such royalties for any exercise by
        You of the rights granted under this License if Your exercise of
        such rights is for a purpose or use which is otherwise than
        noncommercial as permitted under Section 4(c) and otherwise waives
        the right to collect royalties through any statutory or compulsory
        licensing scheme; and,
   iii. Voluntary License Schemes. The Licensor reserves the right to
        collect royalties, whether individually or, in the event that the
        Licensor is a member of a collecting society that administers
        voluntary licensing schemes, via that society, from any exercise
        by You of the rights granted under this License that is for a
        purpose or use which is otherwise than noncommercial as permitted
        under Section 4(c).
 f. Except as otherwise agreed in writing by the Licensor or as may be
    otherwise permitted by applicable law, if You Reproduce, Distribute or
    Publicly Perform the Work either by itself or as part of any
    Adaptations or Collections, You must not distort, mutilate, modify or
    take other derogatory action in relation to the Work which would be
    prejudicial to the Original Author's honor or reputation. Licensor
    agrees that in those jurisdictions (e.g. Japan), in which any exercise
    of the right granted in Section 3(b) of this License (the right to
    make Adaptations) would be deemed to be a distortion, mutilation,
    modification or other derogatory action prejudicial to the Original
    Author's honor and reputation, the Licensor will waive or not assert,
    as appropriate, this Section, to the fullest extent permitted by the
    applicable national law, to enable You to reasonably exercise Your
    right under Section 3(b) of this License (right to make Adaptations)
    but not otherwise.

5. Representations, Warranties and Disclaimer

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE
FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS
AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE
WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. Termination

 a. This License and the rights granted hereunder will terminate
    automatically upon any breach by You of the terms of this License.
    Individuals or entities who have received Adaptations or Collections
    from You under this License, however, will not have their licenses
    terminated provided such individuals or entities remain in full
    compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
    survive any termination of this License.
 b. Subject to the above terms and conditions, the license granted here is
    perpetual (for the duration of the applicable copyright in the Work).
    Notwithstanding the above, Licensor reserves the right to release the
    Work under different license terms or to stop distributing the Work at
    any time; provided, however that any such election will not serve to
    withdraw this License (or any other license that has been, or is
    required to be, granted under the terms of this License), and this
    License will continue in full force and effect unless terminated as
    stated above.

8. Miscellaneous

 a. Each time You Distribute or Publicly Perform the Work or a Collection,
    the Licensor offers to the recipient a license to the Work on the same
    terms and conditions as the license granted to You under this License.
 b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
    offers to the recipient a license to the original Work on the same
    terms and conditions as the license granted to You under this License.
 c. If any provision of this License is invalid or unenforceable under
    applicable law, it shall not affect the validity or enforceability of
    the remainder of the terms of this License, and without further action
    by the parties to this agreement, such provision shall be reformed to
    the minimum extent necessary to make such provision valid and
    enforceable.
 d. No term or provision of this License shall be deemed waived and no
    breach consented to unless such waiver or consent shall be in writing
    and signed by the party to be charged with such waiver or consent.
 e. This License constitutes the entire agreement between the parties with
    respect to the Work licensed here. There are no understandings,
    agreements or representations with respect to the Work not specified
    here. Licensor shall not be bound by any additional provisions that
    may appear in any communication from You. This License may not be
    modified without the mutual written agreement of the Licensor and You.
 f. The rights granted under, and the subject matter referenced, in this
    License were drafted utilizing the terminology of the Berne Convention
    for the Protection of Literary and Artistic Works (as amended on
    September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
    Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
    and the Universal Copyright Convention (as revised on July 24, 1971).
    These rights and subject matter take effect in the relevant
    jurisdiction in which the License terms are sought to be enforced
    according to the corresponding provisions of the implementation of
    those treaty provisions in the applicable national law. If the
    standard suite of rights granted under applicable copyright law
    includes additional rights not granted under this License, such
    additional rights are deemed to be included in the License; this
    License is not intended to restrict the license of any rights under
    applicable law.


Creative Commons Notice

    Creative Commons is not a party to this License, and makes no warranty
    whatsoever in connection with the Work. Creative Commons will not be
    liable to You or any party on any legal theory for any damages
    whatsoever, including without limitation any general, special,
    incidental or consequential damages arising in connection to this
    license. Notwithstanding the foregoing two (2) sentences, if Creative
    Commons has expressly identified itself as the Licensor hereunder, it
    shall have all rights and obligations of Licensor.

    Except for the limited purpose of indicating to the public that the
    Work is licensed under the CCPL, Creative Commons does not authorize
    the use by either party of the trademark "Creative Commons" or any
    related trademark or logo of Creative Commons without the prior
    written consent of Creative Commons. Any permitted use will be in
    compliance with Creative Commons' then-current trademark usage
    guidelines, as may be published on its website or otherwise made
    available upon request from time to time. For the avoidance of doubt,
    this trademark restriction does not form part of this License.

    Creative Commons may be contacted at https://creativecommons.org/.


================================================
FILE: docs/README.md
================================================
# Doctrine ORM Documentation

The documentation is written in [ReStructured Text](https://docutils.sourceforge.io/rst.html).

## How to Generate:

In the project root, run

    composer docs

This will generate the documentation into the `docs/output` subdirectory.

To browse the documentation, you need to run a webserver:

    cd docs/output
    php -S localhost:8000

Now the documentation is available at [http://localhost:8000](http://localhost:8000).


================================================
FILE: docs/composer.json
================================================
{
    "name": "doctrine/orm-docs",
    "description": "Documentation for the Object-Relational Mapper\"",
    "type": "library",
    "license": "MIT",
    "require-dev": {
        "doctrine/docs-builder": "^1.0"
    }
}


================================================
FILE: docs/en/cookbook/advanced-field-value-conversion-using-custom-mapping-types.rst
================================================
Advanced field value conversion using custom mapping types
==========================================================

.. sectionauthor:: Jan Sorgalla <jsorgalla@googlemail.com>

When creating entities, you sometimes have the need to transform field values
before they are saved to the database. In Doctrine you can use Custom Mapping
Types to solve this (see: :ref:`reference-basic-mapping-custom-mapping-types`).

There are several ways to achieve this: converting the value inside the Type
class, converting the value on the database-level or a combination of both.

This article describes the third way by implementing the MySQL specific column
type `Point <https://dev.mysql.com/doc/refman/8.0/en/gis-class-point.html>`_.

The ``Point`` type is part of the `Spatial extension <https://dev.mysql.com/doc/refman/8.0/en/spatial-extensions.html>`_
of MySQL and enables you to store a single location in a coordinate space by
using x and y coordinates. You can use the Point type to store a
longitude/latitude pair to represent a geographic location.

The entity
----------

We create a simple entity with a field ``$point`` which holds a value object
``Point`` representing the latitude and longitude of the position.

The entity class:

.. code-block:: php

    <?php

    namespace Geo\Entity;

    use Geo\ValueObject\Point;

    #[Entity]
    class Location
    {
        #[Column(type: 'point')]
        private Point $point;

        #[Column]
        private string $address;

        public function setPoint(Point $point): void
        {
            $this->point = $point;
        }

        public function getPoint(): Point
        {
            return $this->point;
        }

        public function setAddress(string $address): void
        {
            $this->address = $address;
        }

        public function getAddress(): string
        {
            return $this->address;
        }
    }

We use the custom type ``point`` in the ``#[Column]``  attribute of the
``$point`` field. We will create this custom mapping type in the next chapter.

The point class:

.. code-block:: php

    <?php

    namespace Geo\ValueObject;

    class Point
    {
        public function __construct(
            private float $latitude,
            private float $longitude,
        ) {
        }

        public function getLatitude(): float
        {
            return $this->latitude;
        }

        public function getLongitude(): float
        {
            return $this->longitude;
        }
    }

The mapping type
----------------

Now we're going to create the ``point`` type and implement all required methods.

.. code-block:: php

    <?php

    namespace Geo\Types;

    use Doctrine\DBAL\Types\Type;
    use Doctrine\DBAL\Platforms\AbstractPlatform;

    use Geo\ValueObject\Point;

    class PointType extends Type
    {
        const POINT = 'point';

        public function getName()
        {
            return self::POINT;
        }

        public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
        {
            return 'POINT';
        }

        public function convertToPHPValue($value, AbstractPlatform $platform)
        {
            list($longitude, $latitude) = sscanf($value, 'POINT(%f %f)');

            return new Point($latitude, $longitude);
        }

        public function convertToDatabaseValue($value, AbstractPlatform $platform)
        {
            if ($value instanceof Point) {
                $value = sprintf('POINT(%F %F)', $value->getLongitude(), $value->getLatitude());
            }

            return $value;
        }

        public function convertToPHPValueSQL($sqlExpr, AbstractPlatform $platform)
        {
            return sprintf('AsText(%s)', $sqlExpr);
        }

        public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform)
        {
            return sprintf('PointFromText(%s)', $sqlExpr);
        }
    }

We do a 2-step conversion here. In the first step, we convert the ``Point``
object into a string representation before saving to the database (in the
``convertToDatabaseValue`` method) and back into an object after fetching the
value from the database (in the ``convertToPHPValue`` method).

The format of the string representation format is called
`Well-known text (WKT) <https://en.wikipedia.org/wiki/Well-known_text>`_.
The advantage of this format is, that it is both human readable and parsable by MySQL.

Internally, MySQL stores geometry values in a binary format that is not
identical to the WKT format. So, we need to let MySQL transform the WKT
representation into its internal format.

This is where the ``convertToPHPValueSQL`` and  ``convertToDatabaseValueSQL``
methods come into play.

This methods wrap a sql expression (the WKT representation of the Point) into
MySQL functions `ST_PointFromText <https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-pointfromtext>`_
and `ST_AsText <https://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html#function_st-astext>`_
which convert WKT strings to and from the internal format of MySQL.

.. note::

    When using DQL queries, the ``convertToPHPValueSQL`` and
    ``convertToDatabaseValueSQL`` methods only apply to identification variables
    and path expressions in SELECT clauses. Expressions in  WHERE clauses are
    **not** wrapped!

    If you want to use Point values in WHERE clauses, you have to implement a
    :doc:`user defined function <dql-user-defined-functions>` for
    ``PointFromText``.

Example usage
-------------

.. code-block:: php

    <?php

    // Bootstrapping stuff...
    // $em = new \Doctrine\ORM\EntityManager($connection, $config);

    // Setup custom mapping type
    use Doctrine\DBAL\Types\Type;

    Type::addType('point', 'Geo\Types\PointType');
    $em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('point', 'point');

    // Store a Location object
    use Geo\Entity\Location;
    use Geo\ValueObject\Point;

    $location = new Location();

    $location->setAddress('1600 Amphitheatre Parkway, Mountain View, CA');
    $location->setPoint(new Point(37.4220761, -122.0845187));

    $em->persist($location);
    $em->flush();
    $em->clear();

    // Fetch the Location object
    $query = $em->createQuery("SELECT l FROM Geo\Entity\Location l WHERE l.address = '1600 Amphitheatre Parkway, Mountain View, CA'");
    $location = $query->getSingleResult();

    /** @var Geo\ValueObject\Point */
    $point = $location->getPoint();


================================================
FILE: docs/en/cookbook/aggregate-fields.rst
================================================
Aggregate Fields
================

.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>

You will often come across the requirement to display aggregate
values of data that can be computed by using the MIN, MAX, COUNT or
SUM SQL functions. For any ORM this is a tricky issue
traditionally. Doctrine ORM offers several ways to get access to
these values and this article will describe all of them from
different perspectives.

You will see that aggregate fields can become very explicit
features in your domain model and how this potentially complex
business rules can be easily tested.

An example model
----------------

Say you want to model a bank account and all their entries. Entries
into the account can either be of positive or negative money
values. Each account has a credit limit and the account is never
allowed to have a balance below that value.

For simplicity we live in a world where money is composed of
integers only. Also we omit the receiver/sender name, stated reason
for transfer and the execution date. These all would have to be
added on the ``Entry`` object.

Our entities look like:

.. code-block:: php

    <?php

    namespace Bank\Entities;

    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;

    #[ORM\Entity]
    class Account
    {
        #[ORM\Id]
        #[ORM\GeneratedValue]
        #[ORM\Column(type: 'integer')]
        private ?int $id;

        #[ORM\OneToMany(targetEntity: Entry::class, mappedBy: 'account', cascade: ['persist'])]
        private Collection $entries;


        public function __construct(
            #[ORM\Column(type: 'string', unique: true)]
            private string $no,

            #[ORM\Column(type: 'integer')]
            private int $maxCredit = 0,
        ) {
            $this->entries = new ArrayCollection();
        }
    }

    #[ORM\Entity]
    class Entry
    {
        #[ORM\Id]
        #[ORM\GeneratedValue]
        #[ORM\Column(type: 'integer')]
        private ?int $id;

        public function __construct(
            #[ORM\ManyToOne(targetEntity: Account::class, inversedBy: 'entries')]
            private Account $account,

            #[ORM\Column(type: 'integer')]
            private int $amount,
        ) {
            // more stuff here, from/to whom, stated reason, execution date and such
        }

        public function getAmount(): Amount
        {
            return $this->amount;
        }
    }

Using DQL
---------

The Doctrine Query Language allows you to select for aggregate
values computed from fields of your Domain Model. You can select
the current balance of your account by calling:

.. code-block:: php

    <?php
    $dql = "SELECT SUM(e.amount) AS balance FROM Bank\Entities\Entry e " .
           "WHERE e.account = ?1";
    $balance = $em->createQuery($dql)
                  ->setParameter(1, $myAccountId)
                  ->getSingleScalarResult();

The ``$em`` variable in this (and forthcoming) example holds the
Doctrine ``EntityManager``. We create a query for the SUM of all
amounts (negative amounts are withdraws) and retrieve them as a
single scalar result, essentially return only the first column of
the first row.

This approach is simple and powerful, however it has a serious
drawback. We have to execute a specific query for the balance
whenever we need it.

To implement a powerful domain model we would rather have access to
the balance from our ``Account`` entity during all times (even if
the Account was not persisted in the database before!).

Also an additional requirement is the max credit per ``Account``
rule.

We cannot reliably enforce this rule in our ``Account`` entity with
the DQL retrieval of the balance. There are many different ways to
retrieve accounts. We cannot guarantee that we can execute the
aggregation query for all these use-cases, let alone that a
userland programmer checks this balance against newly added
entries.

Using your Domain Model
-----------------------

``Account`` and all the ``Entry`` instances are connected through a
collection, which means we can compute this value at runtime:

.. code-block:: php

    <?php
    class Account
    {
        // .. previous code

        public function getBalance(): int
        {
            $balance = 0;
            foreach ($this->entries as $entry) {
                $balance += $entry->getAmount();
            }

            return $balance;
        }
    }

Now we can always call ``Account::getBalance()`` to access the
current account balance.

To enforce the max credit rule we have to implement the "Aggregate
Root" pattern as described in Eric Evans book on Domain Driven
Design. Described with one sentence, an aggregate root controls the
instance creation, access and manipulation of its children.

In our case we want to enforce that new entries can only added to
the ``Account`` by using a designated method. The ``Account`` is
the aggregate root of this relation. We can also enforce the
correctness of the bi-directional ``Account`` <-> ``Entry``
relation with this method:

.. code-block:: php

    <?php
    class Account
    {
        public function addEntry(int $amount): void
        {
            $this->assertAcceptEntryAllowed($amount);

            $this->entries[] = new Entry($this, $amount);
        }
    }

Now look at the following test-code for our entities:

.. code-block:: php

    <?php

    use PHPUnit\Framework\TestCase;

    class AccountTest extends TestCase
    {
        public function testAddEntry()
        {
            $account = new Account("123456", maxCredit: 200);
            $this->assertEquals(0, $account->getBalance());

            $account->addEntry(500);
            $this->assertEquals(500, $account->getBalance());

            $account->addEntry(-700);
            $this->assertEquals(-200, $account->getBalance());
        }

        public function testExceedMaxLimit()
        {
            $account = new Account("123456", maxCredit: 200);

            $this->expectException(Exception::class);
            $account->addEntry(-1000);
        }
    }

To enforce our rule we can now implement the assertion in
``Account::addEntry``:

.. code-block:: php

    <?php

    class Account
    {
        // .. previous code

        private function assertAcceptEntryAllowed(int $amount): void
        {
            $futureBalance = $this->getBalance() + $amount;
            $allowedMinimalBalance = ($this->maxCredit * -1);
            if ($futureBalance < $allowedMinimalBalance) {
                throw new Exception("Credit Limit exceeded, entry is not allowed!");
            }
        }
    }

We haven't talked to the entity manager for persistence of our
account example before. You can call
``EntityManager::persist($account)`` and then
``EntityManager::flush()`` at any point to save the account to the
database. All the nested ``Entry`` objects are automatically
flushed to the database also.

.. code-block:: php

    <?php
    $account = new Account("123456", 200);
    $account->addEntry(500);
    $account->addEntry(-200);
    $em->persist($account);
    $em->flush();

The current implementation has a considerable drawback. To get the
balance, we have to initialize the complete ``Account::$entries``
collection, possibly a very large one. This can considerably hurt
the performance of your application.

Using an Aggregate Field
------------------------

To overcome the previously mentioned issue (initializing the whole
entries collection) we want to add an aggregate field called
"balance" on the Account and adjust the code in
``Account::getBalance()`` and ``Account:addEntry()``:

.. code-block:: php

    <?php
    class Account
    {
        #[ORM\Column(type: 'integer')]
        private int $balance = 0;

        public function getBalance(): int
        {
            return $this->balance;
        }

        public function addEntry(int $amount): void
        {
            $this->assertAcceptEntryAllowed($amount);

            $this->entries[] = new Entry($this, $amount);
            $this->balance += $amount;
        }
    }

This is a very simple change, but all the tests still pass. Our
account entities return the correct balance. Now calling the
``Account::getBalance()`` method will not occur the overhead of
loading all entries anymore. Adding a new Entry to the
``Account::$entities`` will also not initialize the collection
internally.

Adding a new entry is therefore very performant and explicitly
hooked into the domain model. It will only update the account with
the current balance and insert the new entry into the database.

Tackling Race Conditions with Aggregate Fields
----------------------------------------------

Whenever you denormalize your database schema race-conditions can
potentially lead to inconsistent state. See this example:

.. code-block:: php

    <?php

    use Bank\Entities\Account;

    // The Account $accId has a balance of 0 and a max credit limit of 200:
    // request 1 account
    $account1 = $em->find(Account::class, $accId);

    // request 2 account
    $account2 = $em->find(Account::class, $accId);

    $account1->addEntry(-200);
    $account2->addEntry(-200);

    // now request 1 and 2 both flush the changes.

The aggregate field ``Account::$balance`` is now -200, however the
SUM over all entries amounts yields -400. A violation of our max
credit rule.

You can use both optimistic or pessimistic locking to safe-guard
your aggregate fields against this kind of race-conditions. Reading
Eric Evans DDD carefully he mentions that the "Aggregate Root"
(Account in our example) needs a locking mechanism.

Optimistic locking is as easy as adding a version column:

.. code-block:: php

    <?php

    class Account
    {
        #[ORM\Column(type: 'integer')]
        #[ORM\Version]
        private int $version;
    }

The previous example would then throw an exception in the face of
whatever request saves the entity last (and would create the
inconsistent state).

Pessimistic locking requires an additional flag set on the
``EntityManager::find()`` call, enabling write locking directly in
the database using a FOR UPDATE.

.. code-block:: php

    <?php

    use Bank\Entities\Account;
    use Doctrine\DBAL\LockMode;

    $account = $em->find(Account::class, $accId, LockMode::PESSIMISTIC_WRITE);

Keeping Updates and Deletes in Sync
-----------------------------------

The example shown in this article does not allow changes to the
value in ``Entry``, which considerably simplifies the effort to
keep ``Account::$balance`` in sync. If your use-case allows fields
to be updated or related entities to be removed you have to
encapsulate this logic in your "Aggregate Root" entity and adjust
the aggregate field accordingly.

Conclusion
----------

This article described how to obtain aggregate values using DQL or
your domain model. It showed how you can easily add an aggregate
field that offers serious performance benefits over iterating all
the related objects that make up an aggregate value. Finally I
showed how you can ensure that your aggregate fields do not get out
of sync due to race-conditions and concurrent access.


================================================
FILE: docs/en/cookbook/custom-mapping-types.rst
================================================
Custom Mapping Types
====================

Doctrine allows you to create new mapping types. This can come in
handy when you're missing a specific mapping type or when you want
to replace the existing implementation of a mapping type.

In order to create a new mapping type you need to subclass
``Doctrine\DBAL\Types\Type`` and implement/override the methods as
you wish. Here is an example skeleton of such a custom type class:

.. code-block:: php

    <?php
    namespace My\Project\Types;

    use Doctrine\DBAL\Types\Type;
    use Doctrine\DBAL\Platforms\AbstractPlatform;

    /**
     * My custom datatype.
     */
    class MyType extends Type
    {
        const MYTYPE = 'mytype'; // modify to match your type name

        public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
        {
            // return the SQL used to create your column type. To create a portable column type, use the $platform.
        }

        public function convertToPHPValue($value, AbstractPlatform $platform)
        {
            // This is executed when the value is read from the database. Make your conversions here, optionally using the $platform.
        }

        public function convertToDatabaseValue($value, AbstractPlatform $platform)
        {
            // This is executed when the value is written to the database. Make your conversions here, optionally using the $platform.
        }

        public function getName()
        {
            return self::MYTYPE; // modify to match your constant name
        }
    }

.. note::

    The following assumptions are applied to mapping types by the ORM:

    -  The ``UnitOfWork`` never passes values to the database convert
       method that did not change in the request.
    -  The ``UnitOfWork`` internally assumes that entity identifiers are
       castable to string. Hence, when using custom types that map to PHP
       objects as IDs, such objects must implement the ``__toString()`` magic
       method.

When you have implemented the type you still need to let Doctrine
know about it. This can be achieved through the
``Doctrine\DBAL\Types\Type#addType($name, $className)``
method. See the following example:

.. code-block:: php

    <?php
    // in bootstrapping code

    // ...

    use Doctrine\DBAL\Types\Type;

    // ...

    // Register my type
    Type::addType('mytype', 'My\Project\Types\MyType');

To convert the underlying database type of your
new "mytype" directly into an i
Download .txt
gitextract_zhimkn3r/

├── .doctrine-project.json
├── .gitattributes
├── .github/
│   ├── PULL_REQUEST_TEMPLATE/
│   │   ├── Failing_Test.md
│   │   ├── Improvement.md
│   │   └── New_Feature.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── coding-standards.yml
│       ├── composer-lint.yml
│       ├── continuous-integration.yml
│       ├── documentation.yml
│       ├── phpbench.yml
│       ├── release-on-milestone-closed.yml
│       ├── stale.yml
│       ├── static-analysis.yml
│       └── website-schema.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── UPGRADE.md
├── ci/
│   └── github/
│       └── phpunit/
│           ├── mysqli.xml
│           ├── pdo_mysql.xml
│           ├── pdo_pgsql.xml
│           ├── pdo_sqlite.xml
│           ├── pgsql.xml
│           └── sqlite3.xml
├── composer.json
├── docs/
│   ├── .gitignore
│   ├── LICENSE.md
│   ├── README.md
│   ├── composer.json
│   └── en/
│       ├── cookbook/
│       │   ├── advanced-field-value-conversion-using-custom-mapping-types.rst
│       │   ├── aggregate-fields.rst
│       │   ├── custom-mapping-types.rst
│       │   ├── decorator-pattern.rst
│       │   ├── dql-custom-walkers/
│       │   │   └── InterpolateParametersSQLOutputWalker.php
│       │   ├── dql-custom-walkers.rst
│       │   ├── dql-user-defined-functions.rst
│       │   ├── entities-in-session.rst
│       │   ├── generated-columns/
│       │   │   ├── Article.php
│       │   │   └── Person.php
│       │   ├── generated-columns.rst
│       │   ├── implementing-arrayaccess-for-domain-objects.rst
│       │   ├── mysql-enums.rst
│       │   ├── resolve-target-entity-listener.rst
│       │   ├── sql-table-prefixes.rst
│       │   ├── strategy-cookbook-introduction.rst
│       │   ├── validation-of-entities.rst
│       │   └── working-with-datetime.rst
│       ├── index.rst
│       ├── reference/
│       │   ├── advanced-configuration.rst
│       │   ├── architecture.rst
│       │   ├── association-mapping.rst
│       │   ├── attributes-reference.rst
│       │   ├── basic-mapping/
│       │   │   ├── DefaultValues.php
│       │   │   └── default-values.xml
│       │   ├── basic-mapping.rst
│       │   ├── batch-processing.rst
│       │   ├── best-practices.rst
│       │   ├── caching.rst
│       │   ├── change-tracking-policies.rst
│       │   ├── configuration.rst
│       │   ├── dql-doctrine-query-language.rst
│       │   ├── events.rst
│       │   ├── faq.rst
│       │   ├── filters.rst
│       │   ├── improving-performance.rst
│       │   ├── inheritance-mapping.rst
│       │   ├── installation.rst
│       │   ├── limitations-and-known-issues.rst
│       │   ├── metadata-drivers.rst
│       │   ├── namingstrategy.rst
│       │   ├── native-sql.rst
│       │   ├── partial-hydration.rst
│       │   ├── partial-objects.rst
│       │   ├── php-mapping.rst
│       │   ├── query-builder.rst
│       │   ├── second-level-cache.rst
│       │   ├── security.rst
│       │   ├── tools.rst
│       │   ├── transactions-and-concurrency.rst
│       │   ├── typedfieldmapper.rst
│       │   ├── unitofwork-associations.rst
│       │   ├── unitofwork.rst
│       │   ├── working-with-associations.rst
│       │   ├── working-with-objects.rst
│       │   └── xml-mapping.rst
│       ├── sidebar.rst
│       └── tutorials/
│           ├── composite-primary-keys.rst
│           ├── embeddables.rst
│           ├── extra-lazy-associations.rst
│           ├── getting-started.rst
│           ├── ordered-associations.rst
│           ├── override-field-association-mappings-in-subclasses.rst
│           ├── pagination.rst
│           ├── working-with-indexed-associations/
│           │   ├── Market.php
│           │   └── market.xml
│           └── working-with-indexed-associations.rst
├── doctrine-mapping.xsd
├── phpbench.json
├── phpcs.xml.dist
├── phpstan-baseline.neon
├── phpstan-dbal3.neon
├── phpstan-params.neon
├── phpstan.neon
├── phpunit.xml.dist
├── src/
│   ├── AbstractQuery.php
│   ├── Cache/
│   │   ├── AssociationCacheEntry.php
│   │   ├── CacheConfiguration.php
│   │   ├── CacheEntry.php
│   │   ├── CacheException.php
│   │   ├── CacheFactory.php
│   │   ├── CacheKey.php
│   │   ├── CollectionCacheEntry.php
│   │   ├── CollectionCacheKey.php
│   │   ├── CollectionHydrator.php
│   │   ├── ConcurrentRegion.php
│   │   ├── DefaultCache.php
│   │   ├── DefaultCacheFactory.php
│   │   ├── DefaultCollectionHydrator.php
│   │   ├── DefaultEntityHydrator.php
│   │   ├── DefaultQueryCache.php
│   │   ├── EntityCacheEntry.php
│   │   ├── EntityCacheKey.php
│   │   ├── EntityHydrator.php
│   │   ├── Exception/
│   │   │   ├── CacheException.php
│   │   │   ├── CannotUpdateReadOnlyCollection.php
│   │   │   ├── CannotUpdateReadOnlyEntity.php
│   │   │   ├── FeatureNotImplemented.php
│   │   │   ├── NonCacheableEntity.php
│   │   │   └── NonCacheableEntityAssociation.php
│   │   ├── Lock.php
│   │   ├── LockException.php
│   │   ├── Logging/
│   │   │   ├── CacheLogger.php
│   │   │   ├── CacheLoggerChain.php
│   │   │   └── StatisticsCacheLogger.php
│   │   ├── Persister/
│   │   │   ├── CachedPersister.php
│   │   │   ├── Collection/
│   │   │   │   ├── AbstractCollectionPersister.php
│   │   │   │   ├── CachedCollectionPersister.php
│   │   │   │   ├── NonStrictReadWriteCachedCollectionPersister.php
│   │   │   │   ├── ReadOnlyCachedCollectionPersister.php
│   │   │   │   └── ReadWriteCachedCollectionPersister.php
│   │   │   └── Entity/
│   │   │       ├── AbstractEntityPersister.php
│   │   │       ├── CachedEntityPersister.php
│   │   │       ├── NonStrictReadWriteCachedEntityPersister.php
│   │   │       ├── ReadOnlyCachedEntityPersister.php
│   │   │       └── ReadWriteCachedEntityPersister.php
│   │   ├── QueryCache.php
│   │   ├── QueryCacheEntry.php
│   │   ├── QueryCacheKey.php
│   │   ├── QueryCacheValidator.php
│   │   ├── Region/
│   │   │   ├── DefaultRegion.php
│   │   │   ├── FileLockRegion.php
│   │   │   └── UpdateTimestampCache.php
│   │   ├── Region.php
│   │   ├── RegionsConfiguration.php
│   │   ├── TimestampCacheEntry.php
│   │   ├── TimestampCacheKey.php
│   │   ├── TimestampQueryCacheValidator.php
│   │   └── TimestampRegion.php
│   ├── Cache.php
│   ├── Configuration.php
│   ├── Decorator/
│   │   └── EntityManagerDecorator.php
│   ├── EntityManager.php
│   ├── EntityManagerInterface.php
│   ├── EntityNotFoundException.php
│   ├── EntityRepository.php
│   ├── Event/
│   │   ├── ListenersInvoker.php
│   │   ├── LoadClassMetadataEventArgs.php
│   │   ├── OnClassMetadataNotFoundEventArgs.php
│   │   ├── OnClearEventArgs.php
│   │   ├── OnFlushEventArgs.php
│   │   ├── PostFlushEventArgs.php
│   │   ├── PostLoadEventArgs.php
│   │   ├── PostPersistEventArgs.php
│   │   ├── PostRemoveEventArgs.php
│   │   ├── PostUpdateEventArgs.php
│   │   ├── PreFlushEventArgs.php
│   │   ├── PrePersistEventArgs.php
│   │   ├── PreRemoveEventArgs.php
│   │   └── PreUpdateEventArgs.php
│   ├── Events.php
│   ├── Exception/
│   │   ├── ConfigurationException.php
│   │   ├── DuplicateFieldException.php
│   │   ├── EntityIdentityCollisionException.php
│   │   ├── EntityManagerClosed.php
│   │   ├── EntityMissingAssignedId.php
│   │   ├── InvalidEntityRepository.php
│   │   ├── InvalidHydrationMode.php
│   │   ├── ManagerException.php
│   │   ├── MissingIdentifierField.php
│   │   ├── MissingMappingDriverImplementation.php
│   │   ├── MultipleSelectorsFoundException.php
│   │   ├── NoMatchingPropertyException.php
│   │   ├── NotSupported.php
│   │   ├── ORMException.php
│   │   ├── PersisterException.php
│   │   ├── RepositoryException.php
│   │   ├── SchemaToolException.php
│   │   ├── UnexpectedAssociationValue.php
│   │   └── UnrecognizedIdentifierFields.php
│   ├── Id/
│   │   ├── AbstractIdGenerator.php
│   │   ├── AssignedGenerator.php
│   │   ├── BigIntegerIdentityGenerator.php
│   │   ├── IdentityGenerator.php
│   │   └── SequenceGenerator.php
│   ├── Internal/
│   │   ├── Hydration/
│   │   │   ├── AbstractHydrator.php
│   │   │   ├── ArrayHydrator.php
│   │   │   ├── HydrationException.php
│   │   │   ├── ObjectHydrator.php
│   │   │   ├── ScalarColumnHydrator.php
│   │   │   ├── ScalarHydrator.php
│   │   │   ├── SimpleObjectHydrator.php
│   │   │   └── SingleScalarHydrator.php
│   │   ├── HydrationCompleteHandler.php
│   │   ├── NoUnknownNamedArguments.php
│   │   ├── SQLResultCasing.php
│   │   ├── StronglyConnectedComponents.php
│   │   ├── TopologicalSort/
│   │   │   └── CycleDetectedException.php
│   │   ├── TopologicalSort.php
│   │   └── UnitOfWork/
│   │       └── InsertBatch.php
│   ├── LazyCriteriaCollection.php
│   ├── Mapping/
│   │   ├── AnsiQuoteStrategy.php
│   │   ├── ArrayAccessImplementation.php
│   │   ├── AssociationMapping.php
│   │   ├── AssociationOverride.php
│   │   ├── AssociationOverrides.php
│   │   ├── AttributeOverride.php
│   │   ├── AttributeOverrides.php
│   │   ├── Builder/
│   │   │   ├── AssociationBuilder.php
│   │   │   ├── ClassMetadataBuilder.php
│   │   │   ├── EmbeddedBuilder.php
│   │   │   ├── EntityListenerBuilder.php
│   │   │   ├── FieldBuilder.php
│   │   │   ├── ManyToManyAssociationBuilder.php
│   │   │   └── OneToManyAssociationBuilder.php
│   │   ├── Cache.php
│   │   ├── ChainTypedFieldMapper.php
│   │   ├── ChangeTrackingPolicy.php
│   │   ├── ClassMetadata.php
│   │   ├── ClassMetadataFactory.php
│   │   ├── Column.php
│   │   ├── CustomIdGenerator.php
│   │   ├── DefaultEntityListenerResolver.php
│   │   ├── DefaultNamingStrategy.php
│   │   ├── DefaultQuoteStrategy.php
│   │   ├── DefaultTypedFieldMapper.php
│   │   ├── DiscriminatorColumn.php
│   │   ├── DiscriminatorColumnMapping.php
│   │   ├── DiscriminatorMap.php
│   │   ├── Driver/
│   │   │   ├── AttributeDriver.php
│   │   │   ├── AttributeReader.php
│   │   │   ├── DatabaseDriver.php
│   │   │   ├── LoadMappingFileImplementation.php
│   │   │   ├── ReflectionBasedDriver.php
│   │   │   ├── RepeatableAttributeCollection.php
│   │   │   ├── SimplifiedXmlDriver.php
│   │   │   └── XmlDriver.php
│   │   ├── Embeddable.php
│   │   ├── Embedded.php
│   │   ├── EmbeddedClassMapping.php
│   │   ├── Entity.php
│   │   ├── EntityListenerResolver.php
│   │   ├── EntityListeners.php
│   │   ├── Exception/
│   │   │   ├── InvalidCustomGenerator.php
│   │   │   └── UnknownGeneratorType.php
│   │   ├── FieldMapping.php
│   │   ├── GeneratedValue.php
│   │   ├── GetReflectionClassImplementation.php
│   │   ├── HasLifecycleCallbacks.php
│   │   ├── Id.php
│   │   ├── Index.php
│   │   ├── InheritanceType.php
│   │   ├── InverseJoinColumn.php
│   │   ├── InverseSideMapping.php
│   │   ├── JoinColumn.php
│   │   ├── JoinColumnMapping.php
│   │   ├── JoinColumnProperties.php
│   │   ├── JoinColumns.php
│   │   ├── JoinTable.php
│   │   ├── JoinTableMapping.php
│   │   ├── LegacyReflectionFields.php
│   │   ├── ManyToMany.php
│   │   ├── ManyToManyAssociationMapping.php
│   │   ├── ManyToManyInverseSideMapping.php
│   │   ├── ManyToManyOwningSideMapping.php
│   │   ├── ManyToOne.php
│   │   ├── ManyToOneAssociationMapping.php
│   │   ├── MappedSuperclass.php
│   │   ├── MappingAttribute.php
│   │   ├── MappingException.php
│   │   ├── NamingStrategy.php
│   │   ├── OneToMany.php
│   │   ├── OneToManyAssociationMapping.php
│   │   ├── OneToOne.php
│   │   ├── OneToOneAssociationMapping.php
│   │   ├── OneToOneInverseSideMapping.php
│   │   ├── OneToOneOwningSideMapping.php
│   │   ├── OrderBy.php
│   │   ├── OwningSideMapping.php
│   │   ├── PostLoad.php
│   │   ├── PostPersist.php
│   │   ├── PostRemove.php
│   │   ├── PostUpdate.php
│   │   ├── PreFlush.php
│   │   ├── PrePersist.php
│   │   ├── PreRemove.php
│   │   ├── PreUpdate.php
│   │   ├── PropertyAccessors/
│   │   │   ├── EmbeddablePropertyAccessor.php
│   │   │   ├── EnumPropertyAccessor.php
│   │   │   ├── ObjectCastPropertyAccessor.php
│   │   │   ├── PropertyAccessor.php
│   │   │   ├── PropertyAccessorFactory.php
│   │   │   ├── RawValuePropertyAccessor.php
│   │   │   ├── ReadonlyAccessor.php
│   │   │   └── TypedNoDefaultPropertyAccessor.php
│   │   ├── QuoteStrategy.php
│   │   ├── ReflectionEmbeddedProperty.php
│   │   ├── ReflectionEnumProperty.php
│   │   ├── ReflectionReadonlyProperty.php
│   │   ├── SequenceGenerator.php
│   │   ├── Table.php
│   │   ├── ToManyAssociationMapping.php
│   │   ├── ToManyAssociationMappingImplementation.php
│   │   ├── ToManyInverseSideMapping.php
│   │   ├── ToManyOwningSideMapping.php
│   │   ├── ToOneAssociationMapping.php
│   │   ├── ToOneInverseSideMapping.php
│   │   ├── ToOneOwningSideMapping.php
│   │   ├── TypedFieldMapper.php
│   │   ├── UnderscoreNamingStrategy.php
│   │   ├── UniqueConstraint.php
│   │   └── Version.php
│   ├── NativeQuery.php
│   ├── NoResultException.php
│   ├── NonUniqueResultException.php
│   ├── ORMInvalidArgumentException.php
│   ├── ORMSetup.php
│   ├── OptimisticLockException.php
│   ├── PersistentCollection.php
│   ├── Persisters/
│   │   ├── Collection/
│   │   │   ├── AbstractCollectionPersister.php
│   │   │   ├── CollectionPersister.php
│   │   │   ├── ManyToManyPersister.php
│   │   │   └── OneToManyPersister.php
│   │   ├── Entity/
│   │   │   ├── AbstractEntityInheritancePersister.php
│   │   │   ├── BasicEntityPersister.php
│   │   │   ├── CachedPersisterContext.php
│   │   │   ├── EntityPersister.php
│   │   │   ├── JoinedSubclassPersister.php
│   │   │   └── SingleTablePersister.php
│   │   ├── Exception/
│   │   │   ├── CantUseInOperatorOnCompositeKeys.php
│   │   │   ├── InvalidOrientation.php
│   │   │   └── UnrecognizedField.php
│   │   ├── MatchingAssociationFieldRequiresObject.php
│   │   ├── PersisterException.php
│   │   ├── SqlExpressionVisitor.php
│   │   └── SqlValueVisitor.php
│   ├── PessimisticLockException.php
│   ├── Proxy/
│   │   ├── Autoloader.php
│   │   ├── DefaultProxyClassNameResolver.php
│   │   ├── InternalProxy.php
│   │   ├── NotAProxyClass.php
│   │   └── ProxyFactory.php
│   ├── Query/
│   │   ├── AST/
│   │   │   ├── ASTException.php
│   │   │   ├── AggregateExpression.php
│   │   │   ├── ArithmeticExpression.php
│   │   │   ├── ArithmeticFactor.php
│   │   │   ├── ArithmeticTerm.php
│   │   │   ├── BetweenExpression.php
│   │   │   ├── CoalesceExpression.php
│   │   │   ├── CollectionMemberExpression.php
│   │   │   ├── ComparisonExpression.php
│   │   │   ├── ConditionalExpression.php
│   │   │   ├── ConditionalFactor.php
│   │   │   ├── ConditionalPrimary.php
│   │   │   ├── ConditionalTerm.php
│   │   │   ├── DeleteClause.php
│   │   │   ├── DeleteStatement.php
│   │   │   ├── EmptyCollectionComparisonExpression.php
│   │   │   ├── EntityAsDtoArgumentExpression.php
│   │   │   ├── ExistsExpression.php
│   │   │   ├── FromClause.php
│   │   │   ├── Functions/
│   │   │   │   ├── AbsFunction.php
│   │   │   │   ├── AvgFunction.php
│   │   │   │   ├── BitAndFunction.php
│   │   │   │   ├── BitOrFunction.php
│   │   │   │   ├── ConcatFunction.php
│   │   │   │   ├── CountFunction.php
│   │   │   │   ├── CurrentDateFunction.php
│   │   │   │   ├── CurrentTimeFunction.php
│   │   │   │   ├── CurrentTimestampFunction.php
│   │   │   │   ├── DateAddFunction.php
│   │   │   │   ├── DateDiffFunction.php
│   │   │   │   ├── DateSubFunction.php
│   │   │   │   ├── FunctionNode.php
│   │   │   │   ├── IdentityFunction.php
│   │   │   │   ├── LengthFunction.php
│   │   │   │   ├── LocateFunction.php
│   │   │   │   ├── LowerFunction.php
│   │   │   │   ├── MaxFunction.php
│   │   │   │   ├── MinFunction.php
│   │   │   │   ├── ModFunction.php
│   │   │   │   ├── SizeFunction.php
│   │   │   │   ├── SqrtFunction.php
│   │   │   │   ├── SubstringFunction.php
│   │   │   │   ├── SumFunction.php
│   │   │   │   ├── TrimFunction.php
│   │   │   │   └── UpperFunction.php
│   │   │   ├── GeneralCaseExpression.php
│   │   │   ├── GroupByClause.php
│   │   │   ├── HavingClause.php
│   │   │   ├── IdentificationVariableDeclaration.php
│   │   │   ├── InListExpression.php
│   │   │   ├── InSubselectExpression.php
│   │   │   ├── IndexBy.php
│   │   │   ├── InputParameter.php
│   │   │   ├── InstanceOfExpression.php
│   │   │   ├── Join.php
│   │   │   ├── JoinAssociationDeclaration.php
│   │   │   ├── JoinAssociationPathExpression.php
│   │   │   ├── JoinClassPathExpression.php
│   │   │   ├── JoinVariableDeclaration.php
│   │   │   ├── LikeExpression.php
│   │   │   ├── Literal.php
│   │   │   ├── NewObjectExpression.php
│   │   │   ├── Node.php
│   │   │   ├── NullComparisonExpression.php
│   │   │   ├── NullIfExpression.php
│   │   │   ├── OrderByClause.php
│   │   │   ├── OrderByItem.php
│   │   │   ├── ParenthesisExpression.php
│   │   │   ├── PartialObjectExpression.php
│   │   │   ├── PathExpression.php
│   │   │   ├── Phase2OptimizableConditional.php
│   │   │   ├── QuantifiedExpression.php
│   │   │   ├── RangeVariableDeclaration.php
│   │   │   ├── SelectClause.php
│   │   │   ├── SelectExpression.php
│   │   │   ├── SelectStatement.php
│   │   │   ├── SimpleArithmeticExpression.php
│   │   │   ├── SimpleCaseExpression.php
│   │   │   ├── SimpleSelectClause.php
│   │   │   ├── SimpleSelectExpression.php
│   │   │   ├── SimpleWhenClause.php
│   │   │   ├── Subselect.php
│   │   │   ├── SubselectFromClause.php
│   │   │   ├── SubselectIdentificationVariableDeclaration.php
│   │   │   ├── TypedExpression.php
│   │   │   ├── UpdateClause.php
│   │   │   ├── UpdateItem.php
│   │   │   ├── UpdateStatement.php
│   │   │   ├── WhenClause.php
│   │   │   └── WhereClause.php
│   │   ├── Exec/
│   │   │   ├── AbstractSqlExecutor.php
│   │   │   ├── FinalizedSelectExecutor.php
│   │   │   ├── MultiTableDeleteExecutor.php
│   │   │   ├── MultiTableUpdateExecutor.php
│   │   │   ├── PreparedExecutorFinalizer.php
│   │   │   ├── SingleSelectExecutor.php
│   │   │   ├── SingleSelectSqlFinalizer.php
│   │   │   ├── SingleTableDeleteUpdateExecutor.php
│   │   │   └── SqlFinalizer.php
│   │   ├── Expr/
│   │   │   ├── Andx.php
│   │   │   ├── Base.php
│   │   │   ├── Comparison.php
│   │   │   ├── Composite.php
│   │   │   ├── From.php
│   │   │   ├── Func.php
│   │   │   ├── GroupBy.php
│   │   │   ├── Join.php
│   │   │   ├── Literal.php
│   │   │   ├── Math.php
│   │   │   ├── OrderBy.php
│   │   │   ├── Orx.php
│   │   │   └── Select.php
│   │   ├── Expr.php
│   │   ├── Filter/
│   │   │   ├── FilterException.php
│   │   │   ├── Parameter.php
│   │   │   └── SQLFilter.php
│   │   ├── FilterCollection.php
│   │   ├── Lexer.php
│   │   ├── OutputWalker.php
│   │   ├── Parameter.php
│   │   ├── ParameterTypeInferer.php
│   │   ├── Parser.php
│   │   ├── ParserResult.php
│   │   ├── Printer.php
│   │   ├── QueryException.php
│   │   ├── QueryExpressionVisitor.php
│   │   ├── ResultSetMapping.php
│   │   ├── ResultSetMappingBuilder.php
│   │   ├── SqlOutputWalker.php
│   │   ├── SqlWalker.php
│   │   ├── TokenType.php
│   │   ├── TreeWalker.php
│   │   ├── TreeWalkerAdapter.php
│   │   └── TreeWalkerChain.php
│   ├── Query.php
│   ├── QueryBuilder.php
│   ├── QueryType.php
│   ├── Repository/
│   │   ├── DefaultRepositoryFactory.php
│   │   ├── Exception/
│   │   │   ├── InvalidFindByCall.php
│   │   │   └── InvalidMagicMethodCall.php
│   │   └── RepositoryFactory.php
│   ├── Tools/
│   │   ├── AttachEntityListenersListener.php
│   │   ├── Console/
│   │   │   ├── ApplicationCompatibility.php
│   │   │   ├── Command/
│   │   │   │   ├── AbstractEntityManagerCommand.php
│   │   │   │   ├── ClearCache/
│   │   │   │   │   ├── CollectionRegionCommand.php
│   │   │   │   │   ├── EntityRegionCommand.php
│   │   │   │   │   ├── MetadataCommand.php
│   │   │   │   │   ├── QueryCommand.php
│   │   │   │   │   ├── QueryRegionCommand.php
│   │   │   │   │   └── ResultCommand.php
│   │   │   │   ├── Debug/
│   │   │   │   │   ├── AbstractCommand.php
│   │   │   │   │   ├── DebugEntityListenersDoctrineCommand.php
│   │   │   │   │   └── DebugEventManagerDoctrineCommand.php
│   │   │   │   ├── GenerateProxiesCommand.php
│   │   │   │   ├── InfoCommand.php
│   │   │   │   ├── MappingDescribeCommand.php
│   │   │   │   ├── MappingDescribeCommandFormat.php
│   │   │   │   ├── RunDqlCommand.php
│   │   │   │   ├── SchemaTool/
│   │   │   │   │   ├── AbstractCommand.php
│   │   │   │   │   ├── CreateCommand.php
│   │   │   │   │   ├── DropCommand.php
│   │   │   │   │   └── UpdateCommand.php
│   │   │   │   └── ValidateSchemaCommand.php
│   │   │   ├── ConsoleRunner.php
│   │   │   ├── EntityManagerProvider/
│   │   │   │   ├── ConnectionFromManagerProvider.php
│   │   │   │   ├── SingleManagerProvider.php
│   │   │   │   └── UnknownManagerException.php
│   │   │   ├── EntityManagerProvider.php
│   │   │   └── MetadataFilter.php
│   │   ├── Debug.php
│   │   ├── DebugUnitOfWorkListener.php
│   │   ├── Event/
│   │   │   ├── GenerateSchemaEventArgs.php
│   │   │   └── GenerateSchemaTableEventArgs.php
│   │   ├── Exception/
│   │   │   ├── MissingColumnException.php
│   │   │   └── NotSupported.php
│   │   ├── Pagination/
│   │   │   ├── CountOutputWalker.php
│   │   │   ├── CountWalker.php
│   │   │   ├── Exception/
│   │   │   │   └── RowNumberOverFunctionNotEnabled.php
│   │   │   ├── LimitSubqueryOutputWalker.php
│   │   │   ├── LimitSubqueryWalker.php
│   │   │   ├── Paginator.php
│   │   │   ├── RootTypeWalker.php
│   │   │   ├── RowNumberOverFunction.php
│   │   │   └── WhereInWalker.php
│   │   ├── ResolveTargetEntityListener.php
│   │   ├── SchemaTool.php
│   │   ├── SchemaValidator.php
│   │   ├── ToolEvents.php
│   │   └── ToolsException.php
│   ├── TransactionRequiredException.php
│   ├── UnexpectedResultException.php
│   ├── UnitOfWork.php
│   └── Utility/
│       ├── HierarchyDiscriminatorResolver.php
│       ├── IdentifierFlattener.php
│       ├── LockSqlHelper.php
│       └── PersisterHelper.php
└── tests/
    ├── .gitignore
    ├── Doctrine/
    │   └── Tests/
    │       └── ORM/
    │           └── Functional/
    │               ├── GH8011Test.php
    │               └── Ticket/
    │                   ├── GH12063Test.php
    │                   └── LazyEagerCollectionTest.php
    ├── Performance/
    │   ├── ChangeSet/
    │   │   └── UnitOfWorkComputeChangesBench.php
    │   ├── EntityManagerFactory.php
    │   ├── Hydration/
    │   │   ├── MixedQueryFetchJoinArrayHydrationPerformanceBench.php
    │   │   ├── MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php
    │   │   ├── MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php
    │   │   ├── SimpleHydrationBench.php
    │   │   ├── SimpleInsertPerformanceBench.php
    │   │   ├── SimpleQueryArrayHydrationPerformanceBench.php
    │   │   ├── SimpleQueryFullObjectHydrationPerformanceBench.php
    │   │   ├── SimpleQueryPartialObjectHydrationPerformanceBench.php
    │   │   ├── SimpleQueryScalarHydrationPerformanceBench.php
    │   │   ├── SingleTableInheritanceHydrationPerformanceBench.php
    │   │   └── SingleTableInheritanceInsertPerformanceBench.php
    │   ├── LazyLoading/
    │   │   ├── ProxyInitializationTimeBench.php
    │   │   └── ProxyInstantiationTimeBench.php
    │   ├── Mock/
    │   │   ├── NonLoadingPersister.php
    │   │   ├── NonProxyLoadingEntityManager.php
    │   │   └── NonProxyLoadingUnitOfWork.php
    │   └── Query/
    │       └── QueryBoundParameterProcessingBench.php
    ├── README.markdown
    ├── StaticAnalysis/
    │   ├── Mapping/
    │   │   └── class-metadata-constructor.php
    │   ├── Tools/
    │   │   └── Pagination/
    │   │       └── paginator-covariant.php
    │   └── get-metadata.php
    ├── Tests/
    │   ├── DbalExtensions/
    │   │   ├── Connection.php
    │   │   ├── QueryLog.php
    │   │   └── SqlLogger.php
    │   ├── DbalTypes/
    │   │   ├── CustomIdObject.php
    │   │   ├── CustomIdObjectType.php
    │   │   ├── CustomIntType.php
    │   │   ├── GH8565EmployeePayloadType.php
    │   │   ├── GH8565ManagerPayloadType.php
    │   │   ├── NegativeToPositiveType.php
    │   │   ├── Rot13Type.php
    │   │   └── UpperCaseStringType.php
    │   ├── EventListener/
    │   │   └── CacheMetadataListener.php
    │   ├── IterableTester.php
    │   ├── Mocks/
    │   │   ├── ArrayResultFactory.php
    │   │   ├── AttributeDriverFactory.php
    │   │   ├── CacheEntryMock.php
    │   │   ├── CacheKeyMock.php
    │   │   ├── CacheRegionMock.php
    │   │   ├── CompatibilityType.php
    │   │   ├── ConcurrentRegionMock.php
    │   │   ├── CustomTreeWalkerJoin.php
    │   │   ├── EntityManagerMock.php
    │   │   ├── EntityPersisterMock.php
    │   │   ├── ExceptionConverterMock.php
    │   │   ├── MetadataDriverMock.php
    │   │   ├── NullSqlWalker.php
    │   │   ├── SchemaManagerMock.php
    │   │   ├── TimestampRegionMock.php
    │   │   └── UnitOfWorkMock.php
    │   ├── Models/
    │   │   ├── AbstractFetchEager/
    │   │   │   ├── AbstractRemoteControl.php
    │   │   │   ├── MobileRemoteControl.php
    │   │   │   └── User.php
    │   │   ├── BigIntegers/
    │   │   │   └── BigIntegers.php
    │   │   ├── BinaryPrimaryKey/
    │   │   │   ├── BinaryId.php
    │   │   │   ├── BinaryIdType.php
    │   │   │   └── Category.php
    │   │   ├── CMS/
    │   │   │   ├── CmsAddress.php
    │   │   │   ├── CmsAddressDTO.php
    │   │   │   ├── CmsAddressDTONamedArgs.php
    │   │   │   ├── CmsAddressListener.php
    │   │   │   ├── CmsArticle.php
    │   │   │   ├── CmsComment.php
    │   │   │   ├── CmsDumbDTO.php
    │   │   │   ├── CmsEmail.php
    │   │   │   ├── CmsEmployee.php
    │   │   │   ├── CmsGroup.php
    │   │   │   ├── CmsPhonenumber.php
    │   │   │   ├── CmsTag.php
    │   │   │   ├── CmsUser.php
    │   │   │   ├── CmsUserDTO.php
    │   │   │   ├── CmsUserDTONamedArgs.php
    │   │   │   └── CmsUserDTOVariadicArg.php
    │   │   ├── Cache/
    │   │   │   ├── Action.php
    │   │   │   ├── Address.php
    │   │   │   ├── Attraction.php
    │   │   │   ├── AttractionContactInfo.php
    │   │   │   ├── AttractionInfo.php
    │   │   │   ├── AttractionLocationInfo.php
    │   │   │   ├── Bar.php
    │   │   │   ├── Beach.php
    │   │   │   ├── City.php
    │   │   │   ├── Client.php
    │   │   │   ├── ComplexAction.php
    │   │   │   ├── Country.php
    │   │   │   ├── Flight.php
    │   │   │   ├── Login.php
    │   │   │   ├── Person.php
    │   │   │   ├── Restaurant.php
    │   │   │   ├── State.php
    │   │   │   ├── Token.php
    │   │   │   ├── Travel.php
    │   │   │   ├── Traveler.php
    │   │   │   ├── TravelerProfile.php
    │   │   │   └── TravelerProfileInfo.php
    │   │   ├── Company/
    │   │   │   ├── CompanyAuction.php
    │   │   │   ├── CompanyCar.php
    │   │   │   ├── CompanyContract.php
    │   │   │   ├── CompanyContractListener.php
    │   │   │   ├── CompanyEmployee.php
    │   │   │   ├── CompanyEvent.php
    │   │   │   ├── CompanyFixContract.php
    │   │   │   ├── CompanyFlexContract.php
    │   │   │   ├── CompanyFlexUltraContract.php
    │   │   │   ├── CompanyFlexUltraContractListener.php
    │   │   │   ├── CompanyManager.php
    │   │   │   ├── CompanyOrganization.php
    │   │   │   ├── CompanyPerson.php
    │   │   │   └── CompanyRaffle.php
    │   │   ├── CompositeKeyInheritance/
    │   │   │   ├── JoinedChildClass.php
    │   │   │   ├── JoinedDerivedChildClass.php
    │   │   │   ├── JoinedDerivedIdentityClass.php
    │   │   │   ├── JoinedDerivedRootClass.php
    │   │   │   ├── JoinedRootClass.php
    │   │   │   ├── SingleChildClass.php
    │   │   │   └── SingleRootClass.php
    │   │   ├── CompositeKeyRelations/
    │   │   │   ├── CustomerClass.php
    │   │   │   └── InvoiceClass.php
    │   │   ├── CustomType/
    │   │   │   ├── CustomIdObjectTypeChild.php
    │   │   │   ├── CustomIdObjectTypeParent.php
    │   │   │   ├── CustomTypeChild.php
    │   │   │   ├── CustomTypeParent.php
    │   │   │   └── CustomTypeUpperCase.php
    │   │   ├── Customer/
    │   │   │   ├── CustomerType.php
    │   │   │   ├── ExternalCustomer.php
    │   │   │   └── InternalCustomer.php
    │   │   ├── DDC117/
    │   │   │   ├── DDC117ApproveChanges.php
    │   │   │   ├── DDC117Article.php
    │   │   │   ├── DDC117ArticleDetails.php
    │   │   │   ├── DDC117Editor.php
    │   │   │   ├── DDC117Link.php
    │   │   │   ├── DDC117Reference.php
    │   │   │   └── DDC117Translation.php
    │   │   ├── DDC1476/
    │   │   │   └── DDC1476EntityWithDefaultFieldType.php
    │   │   ├── DDC1590/
    │   │   │   ├── DDC1590Entity.php
    │   │   │   └── DDC1590User.php
    │   │   ├── DDC1872/
    │   │   │   ├── DDC1872Bar.php
    │   │   │   ├── DDC1872ExampleEntityWithOverride.php
    │   │   │   ├── DDC1872ExampleEntityWithoutOverride.php
    │   │   │   └── DDC1872ExampleTrait.php
    │   │   ├── DDC2372/
    │   │   │   ├── DDC2372Address.php
    │   │   │   ├── DDC2372Admin.php
    │   │   │   ├── DDC2372User.php
    │   │   │   └── Traits/
    │   │   │       └── DDC2372AddressAndAccessors.php
    │   │   ├── DDC2504/
    │   │   │   ├── DDC2504ChildClass.php
    │   │   │   ├── DDC2504OtherClass.php
    │   │   │   └── DDC2504RootClass.php
    │   │   ├── DDC2825/
    │   │   │   ├── ExplicitSchemaAndTable.php
    │   │   │   └── SchemaAndTableInTableName.php
    │   │   ├── DDC3231/
    │   │   │   ├── DDC3231EntityRepository.php
    │   │   │   ├── DDC3231User1.php
    │   │   │   ├── DDC3231User1NoNamespace.php
    │   │   │   ├── DDC3231User2.php
    │   │   │   └── DDC3231User2NoNamespace.php
    │   │   ├── DDC3293/
    │   │   │   ├── DDC3293Address.php
    │   │   │   ├── DDC3293User.php
    │   │   │   └── DDC3293UserPrefixed.php
    │   │   ├── DDC3346/
    │   │   │   ├── DDC3346Article.php
    │   │   │   └── DDC3346Author.php
    │   │   ├── DDC3579/
    │   │   │   ├── DDC3579Admin.php
    │   │   │   ├── DDC3579Group.php
    │   │   │   └── DDC3579User.php
    │   │   ├── DDC3597/
    │   │   │   ├── DDC3597Image.php
    │   │   │   ├── DDC3597Media.php
    │   │   │   ├── DDC3597Root.php
    │   │   │   └── Embeddable/
    │   │   │       └── DDC3597Dimension.php
    │   │   ├── DDC3699/
    │   │   │   ├── DDC3699Child.php
    │   │   │   ├── DDC3699Parent.php
    │   │   │   ├── DDC3699RelationMany.php
    │   │   │   └── DDC3699RelationOne.php
    │   │   ├── DDC3711/
    │   │   │   ├── DDC3711EntityA.php
    │   │   │   └── DDC3711EntityB.php
    │   │   ├── DDC3899/
    │   │   │   ├── DDC3899Contract.php
    │   │   │   ├── DDC3899FixContract.php
    │   │   │   ├── DDC3899FlexContract.php
    │   │   │   └── DDC3899User.php
    │   │   ├── DDC4006/
    │   │   │   ├── DDC4006User.php
    │   │   │   └── DDC4006UserId.php
    │   │   ├── DDC5934/
    │   │   │   ├── DDC5934BaseContract.php
    │   │   │   ├── DDC5934Contract.php
    │   │   │   └── DDC5934Member.php
    │   │   ├── DDC6412/
    │   │   │   └── DDC6412File.php
    │   │   ├── DDC6573/
    │   │   │   ├── DDC6573Currency.php
    │   │   │   ├── DDC6573Item.php
    │   │   │   └── DDC6573Money.php
    │   │   ├── DDC753/
    │   │   │   ├── DDC753CustomRepository.php
    │   │   │   ├── DDC753DefaultRepository.php
    │   │   │   ├── DDC753EntityWithCustomRepository.php
    │   │   │   ├── DDC753EntityWithDefaultCustomRepository.php
    │   │   │   ├── DDC753EntityWithInvalidRepository.php
    │   │   │   └── DDC753InvalidRepository.php
    │   │   ├── DDC869/
    │   │   │   ├── DDC869ChequePayment.php
    │   │   │   ├── DDC869CreditCardPayment.php
    │   │   │   ├── DDC869Payment.php
    │   │   │   └── DDC869PaymentRepository.php
    │   │   ├── DDC889/
    │   │   │   ├── DDC889Class.php
    │   │   │   ├── DDC889Entity.php
    │   │   │   └── DDC889SuperClass.php
    │   │   ├── DDC964/
    │   │   │   ├── DDC964Address.php
    │   │   │   ├── DDC964Admin.php
    │   │   │   ├── DDC964Group.php
    │   │   │   ├── DDC964Guest.php
    │   │   │   └── DDC964User.php
    │   │   ├── DataTransferObjects/
    │   │   │   ├── DtoWithArrayOfEnums.php
    │   │   │   └── DtoWithEnum.php
    │   │   ├── DirectoryTree/
    │   │   │   ├── AbstractContentItem.php
    │   │   │   ├── Directory.php
    │   │   │   └── File.php
    │   │   ├── ECommerce/
    │   │   │   ├── ECommerceCart.php
    │   │   │   ├── ECommerceCategory.php
    │   │   │   ├── ECommerceCustomer.php
    │   │   │   ├── ECommerceFeature.php
    │   │   │   ├── ECommerceProduct.php
    │   │   │   ├── ECommerceProduct2.php
    │   │   │   └── ECommerceShipping.php
    │   │   ├── EagerFetchedCompositeOneToMany/
    │   │   │   ├── RootEntity.php
    │   │   │   ├── SecondLevel.php
    │   │   │   └── SecondLevelWithoutCompositePrimaryKey.php
    │   │   ├── Enums/
    │   │   │   ├── AccessLevel.php
    │   │   │   ├── BookCategory.php
    │   │   │   ├── BookGenre.php
    │   │   │   ├── BookWithGenre.php
    │   │   │   ├── Card.php
    │   │   │   ├── CardNativeEnum.php
    │   │   │   ├── CardWithDefault.php
    │   │   │   ├── CardWithNullable.php
    │   │   │   ├── City.php
    │   │   │   ├── FaultySwitch.php
    │   │   │   ├── Library.php
    │   │   │   ├── Product.php
    │   │   │   ├── Quantity.php
    │   │   │   ├── Scale.php
    │   │   │   ├── Suit.php
    │   │   │   ├── SwitchStatus.php
    │   │   │   ├── TypedCard.php
    │   │   │   ├── TypedCardEnumCompositeId.php
    │   │   │   ├── TypedCardEnumId.php
    │   │   │   ├── TypedCardNativeEnum.php
    │   │   │   ├── Unit.php
    │   │   │   └── UserStatus.php
    │   │   ├── Forum/
    │   │   │   ├── ForumAvatar.php
    │   │   │   ├── ForumBoard.php
    │   │   │   ├── ForumCategory.php
    │   │   │   ├── ForumEntry.php
    │   │   │   └── ForumUser.php
    │   │   ├── GH10132/
    │   │   │   ├── Complex.php
    │   │   │   └── ComplexChild.php
    │   │   ├── GH10288/
    │   │   │   └── GH10288People.php
    │   │   ├── GH10334/
    │   │   │   ├── GH10334Foo.php
    │   │   │   ├── GH10334FooCollection.php
    │   │   │   ├── GH10334Product.php
    │   │   │   ├── GH10334ProductType.php
    │   │   │   └── GH10334ProductTypeId.php
    │   │   ├── GH10336/
    │   │   │   ├── GH10336Entity.php
    │   │   │   └── GH10336Relation.php
    │   │   ├── GH11524/
    │   │   │   ├── GH11524Entity.php
    │   │   │   ├── GH11524Listener.php
    │   │   │   └── GH11524Relation.php
    │   │   ├── GH7141/
    │   │   │   └── GH7141Article.php
    │   │   ├── GH7316/
    │   │   │   └── GH7316Article.php
    │   │   ├── GH7717/
    │   │   │   ├── GH7717Child.php
    │   │   │   └── GH7717Parent.php
    │   │   ├── GH8565/
    │   │   │   ├── GH8565Employee.php
    │   │   │   ├── GH8565Manager.php
    │   │   │   └── GH8565Person.php
    │   │   ├── Generic/
    │   │   │   ├── BooleanModel.php
    │   │   │   ├── DateTimeModel.php
    │   │   │   ├── DecimalModel.php
    │   │   │   ├── NonAlphaColumnsEntity.php
    │   │   │   └── SerializationModel.php
    │   │   ├── GeoNames/
    │   │   │   ├── Admin1.php
    │   │   │   ├── Admin1AlternateName.php
    │   │   │   ├── City.php
    │   │   │   └── Country.php
    │   │   ├── Global/
    │   │   │   └── GlobalNamespaceModel.php
    │   │   ├── Hydration/
    │   │   │   ├── EntityWithArrayDefaultArrayValueM2M.php
    │   │   │   └── SimpleEntity.php
    │   │   ├── InvalidXml.php
    │   │   ├── Issue5989/
    │   │   │   ├── Issue5989Employee.php
    │   │   │   ├── Issue5989Manager.php
    │   │   │   └── Issue5989Person.php
    │   │   ├── Issue9300/
    │   │   │   ├── Issue9300Child.php
    │   │   │   └── Issue9300Parent.php
    │   │   ├── JoinedInheritanceType/
    │   │   │   ├── AnotherChildClass.php
    │   │   │   ├── ChildClass.php
    │   │   │   └── RootClass.php
    │   │   ├── Legacy/
    │   │   │   ├── LegacyArticle.php
    │   │   │   ├── LegacyCar.php
    │   │   │   ├── LegacyUser.php
    │   │   │   └── LegacyUserReference.php
    │   │   ├── ManyToManyPersister/
    │   │   │   ├── ChildClass.php
    │   │   │   ├── OtherParentClass.php
    │   │   │   └── ParentClass.php
    │   │   ├── MixedToOneIdentity/
    │   │   │   ├── CompositeToOneKeyState.php
    │   │   │   └── Country.php
    │   │   ├── Navigation/
    │   │   │   ├── NavCountry.php
    │   │   │   ├── NavPhotos.php
    │   │   │   ├── NavPointOfInterest.php
    │   │   │   ├── NavTour.php
    │   │   │   └── NavUser.php
    │   │   ├── NonPublicSchemaJoins/
    │   │   │   └── User.php
    │   │   ├── NullDefault/
    │   │   │   └── NullDefaultColumn.php
    │   │   ├── OneToOneInverseSideLoad/
    │   │   │   ├── InverseSide.php
    │   │   │   └── OwningSide.php
    │   │   ├── OneToOneInverseSideWithAssociativeIdLoad/
    │   │   │   ├── InverseSide.php
    │   │   │   ├── InverseSideIdTarget.php
    │   │   │   └── OwningSide.php
    │   │   ├── OneToOneSingleTableInheritance/
    │   │   │   ├── Cat.php
    │   │   │   ├── LitterBox.php
    │   │   │   └── Pet.php
    │   │   ├── Pagination/
    │   │   │   ├── Company.php
    │   │   │   ├── Department.php
    │   │   │   ├── Logo.php
    │   │   │   ├── User.php
    │   │   │   └── User1.php
    │   │   ├── PersistentObject/
    │   │   │   ├── PersistentCollectionContent.php
    │   │   │   ├── PersistentCollectionHolder.php
    │   │   │   └── PersistentEntity.php
    │   │   ├── Project/
    │   │   │   ├── Project.php
    │   │   │   ├── ProjectId.php
    │   │   │   ├── ProjectInvalidMapping.php
    │   │   │   └── ProjectName.php
    │   │   ├── PropertyHooks/
    │   │   │   ├── MappingVirtualProperty.php
    │   │   │   └── User.php
    │   │   ├── Quote/
    │   │   │   ├── Address.php
    │   │   │   ├── City.php
    │   │   │   ├── FullAddress.php
    │   │   │   ├── Group.php
    │   │   │   ├── NumericEntity.php
    │   │   │   ├── Phone.php
    │   │   │   └── User.php
    │   │   ├── ReadonlyProperties/
    │   │   │   ├── Author.php
    │   │   │   ├── Book.php
    │   │   │   └── SimpleBook.php
    │   │   ├── Reflection/
    │   │   │   ├── AbstractEmbeddable.php
    │   │   │   ├── ArrayObjectExtendingClass.php
    │   │   │   ├── ClassWithMixedProperties.php
    │   │   │   ├── ConcreteEmbeddable.php
    │   │   │   └── ParentClass.php
    │   │   ├── Routing/
    │   │   │   ├── RoutingLeg.php
    │   │   │   ├── RoutingLocation.php
    │   │   │   ├── RoutingRoute.php
    │   │   │   └── RoutingRouteBooking.php
    │   │   ├── StockExchange/
    │   │   │   ├── Bond.php
    │   │   │   ├── Market.php
    │   │   │   └── Stock.php
    │   │   ├── Taxi/
    │   │   │   ├── Car.php
    │   │   │   ├── Driver.php
    │   │   │   ├── PaidRide.php
    │   │   │   └── Ride.php
    │   │   ├── Tweet/
    │   │   │   ├── Tweet.php
    │   │   │   ├── User.php
    │   │   │   └── UserList.php
    │   │   ├── TypedProperties/
    │   │   │   ├── Contact.php
    │   │   │   ├── UserTyped.php
    │   │   │   └── UserTypedWithCustomTypedField.php
    │   │   ├── Upsertable/
    │   │   │   ├── Insertable.php
    │   │   │   └── Updatable.php
    │   │   ├── ValueConversionType/
    │   │   │   ├── AuxiliaryEntity.php
    │   │   │   ├── InversedManyToManyCompositeIdEntity.php
    │   │   │   ├── InversedManyToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedManyToManyEntity.php
    │   │   │   ├── InversedManyToManyExtraLazyEntity.php
    │   │   │   ├── InversedOneToManyCompositeIdEntity.php
    │   │   │   ├── InversedOneToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedOneToManyEntity.php
    │   │   │   ├── InversedOneToManyExtraLazyEntity.php
    │   │   │   ├── InversedOneToOneCompositeIdEntity.php
    │   │   │   ├── InversedOneToOneCompositeIdForeignKeyEntity.php
    │   │   │   ├── InversedOneToOneEntity.php
    │   │   │   ├── OwningManyToManyCompositeIdEntity.php
    │   │   │   ├── OwningManyToManyCompositeIdForeignKeyEntity.php
    │   │   │   ├── OwningManyToManyEntity.php
    │   │   │   ├── OwningManyToManyExtraLazyEntity.php
    │   │   │   ├── OwningManyToOneCompositeIdEntity.php
    │   │   │   ├── OwningManyToOneCompositeIdForeignKeyEntity.php
    │   │   │   ├── OwningManyToOneEntity.php
    │   │   │   ├── OwningManyToOneExtraLazyEntity.php
    │   │   │   ├── OwningManyToOneIdForeignKeyEntity.php
    │   │   │   ├── OwningOneToOneCompositeIdEntity.php
    │   │   │   ├── OwningOneToOneCompositeIdForeignKeyEntity.php
    │   │   │   └── OwningOneToOneEntity.php
    │   │   ├── ValueObjects/
    │   │   │   ├── Name.php
    │   │   │   └── Person.php
    │   │   ├── VersionedManyToOne/
    │   │   │   ├── Article.php
    │   │   │   └── Category.php
    │   │   └── VersionedOneToOne/
    │   │       ├── FirstRelatedEntity.php
    │   │       └── SecondRelatedEntity.php
    │   ├── ORM/
    │   │   ├── AbstractQueryTest.php
    │   │   ├── Cache/
    │   │   │   ├── CacheConfigTest.php
    │   │   │   ├── CacheKeyTest.php
    │   │   │   ├── CacheLoggerChainTest.php
    │   │   │   ├── DefaultCacheFactoryTest.php
    │   │   │   ├── DefaultCacheTest.php
    │   │   │   ├── DefaultCollectionHydratorTest.php
    │   │   │   ├── DefaultEntityHydratorTest.php
    │   │   │   ├── DefaultQueryCacheTest.php
    │   │   │   ├── DefaultRegionTest.php
    │   │   │   ├── FileLockRegionTest.php
    │   │   │   ├── Persister/
    │   │   │   │   ├── Collection/
    │   │   │   │   │   ├── CollectionPersisterTestCase.php
    │   │   │   │   │   ├── NonStrictReadWriteCachedCollectionPersisterTest.php
    │   │   │   │   │   ├── ReadOnlyCachedCollectionPersisterTest.php
    │   │   │   │   │   └── ReadWriteCachedCollectionPersisterTest.php
    │   │   │   │   └── Entity/
    │   │   │   │       ├── EntityPersisterTestCase.php
    │   │   │   │       ├── NonStrictReadWriteCachedEntityPersisterTest.php
    │   │   │   │       ├── ReadOnlyCachedEntityPersisterTest.php
    │   │   │   │       └── ReadWriteCachedEntityPersisterTest.php
    │   │   │   ├── RegionTestCase.php
    │   │   │   └── StatisticsCacheLoggerTest.php
    │   │   ├── ConfigurationTest.php
    │   │   ├── Entity/
    │   │   │   └── ConstructorTest.php
    │   │   ├── EntityManagerTest.php
    │   │   ├── EntityNotFoundExceptionTest.php
    │   │   ├── Event/
    │   │   │   └── OnClassMetadataNotFoundEventArgsTest.php
    │   │   ├── Functional/
    │   │   │   ├── AbstractFetchEagerTest.php
    │   │   │   ├── AbstractManyToManyAssociationTestCase.php
    │   │   │   ├── AdvancedAssociationTest.php
    │   │   │   ├── AdvancedDqlQueryTest.php
    │   │   │   ├── BasicFunctionalTest.php
    │   │   │   ├── CascadeRemoveOrderTest.php
    │   │   │   ├── ClassTableInheritanceSecondTest.php
    │   │   │   ├── ClassTableInheritanceTest.php
    │   │   │   ├── ClearEventTest.php
    │   │   │   ├── CompositeKeyRelationsTest.php
    │   │   │   ├── CompositePrimaryKeyTest.php
    │   │   │   ├── CompositePrimaryKeyWithAssociationsTest.php
    │   │   │   ├── CustomFunctionsTest.php
    │   │   │   ├── CustomIdObjectTypeTest.php
    │   │   │   ├── DatabaseDriverTest.php
    │   │   │   ├── DatabaseDriverTestCase.php
    │   │   │   ├── DefaultTimeExpressionTest.php
    │   │   │   ├── DefaultTimeExpressionXmlTest.php
    │   │   │   ├── DefaultValuesTest.php
    │   │   │   ├── DetachedEntityTest.php
    │   │   │   ├── EagerFetchCollectionTest.php
    │   │   │   ├── EagerFetchOneToManyWithCompositeKeyTest.php
    │   │   │   ├── EntityListenersTest.php
    │   │   │   ├── EntityRepositoryCriteriaTest.php
    │   │   │   ├── EntityRepositoryTest.php
    │   │   │   ├── EnumTest.php
    │   │   │   ├── ExtraLazyCollectionTest.php
    │   │   │   ├── FlushEventTest.php
    │   │   │   ├── GH7877Test.php
    │   │   │   ├── HydrationCacheTest.php
    │   │   │   ├── IdentityMapTest.php
    │   │   │   ├── IndexByAssociationTest.php
    │   │   │   ├── InsertableUpdatableTest.php
    │   │   │   ├── InvalidMappingDefinitionTest.php
    │   │   │   ├── JoinedTableCompositeKeyTest.php
    │   │   │   ├── LifecycleCallbackTest.php
    │   │   │   ├── Locking/
    │   │   │   │   ├── GearmanLockTest.php
    │   │   │   │   ├── LockAgentWorker.php
    │   │   │   │   ├── LockTest.php
    │   │   │   │   └── OptimisticTest.php
    │   │   │   ├── ManyToManyBasicAssociationTest.php
    │   │   │   ├── ManyToManyBidirectionalAssociationTest.php
    │   │   │   ├── ManyToManyEventTest.php
    │   │   │   ├── ManyToManySelfReferentialAssociationTest.php
    │   │   │   ├── ManyToManyUnidirectionalAssociationTest.php
    │   │   │   ├── MappedSuperclassTest.php
    │   │   │   ├── NativeQueryTest.php
    │   │   │   ├── NewOperatorTest.php
    │   │   │   ├── OneToManyBidirectionalAssociationTest.php
    │   │   │   ├── OneToManyOrphanRemovalTest.php
    │   │   │   ├── OneToManySelfReferentialAssociationTest.php
    │   │   │   ├── OneToManyUnidirectionalAssociationTest.php
    │   │   │   ├── OneToOneBidirectionalAssociationTest.php
    │   │   │   ├── OneToOneEagerLoadingTest.php
    │   │   │   ├── OneToOneInverseSideLoadAfterDqlQueryTest.php
    │   │   │   ├── OneToOneInverseSideWithAssociativeIdLoadAfterDqlQueryTest.php
    │   │   │   ├── OneToOneOrphanRemovalTest.php
    │   │   │   ├── OneToOneSelfReferentialAssociationTest.php
    │   │   │   ├── OneToOneSingleTableInheritanceTest.php
    │   │   │   ├── OneToOneUnidirectionalAssociationTest.php
    │   │   │   ├── OrderedCollectionTest.php
    │   │   │   ├── OrderedJoinedTableInheritanceCollectionTest.php
    │   │   │   ├── PaginationTest.php
    │   │   │   ├── ParserResultSerializationTest.php
    │   │   │   ├── ParserResults/
    │   │   │   │   └── single_select_2_17_0.txt
    │   │   │   ├── PersistentCollectionCriteriaTest.php
    │   │   │   ├── PersistentCollectionTest.php
    │   │   │   ├── PostFlushEventTest.php
    │   │   │   ├── PostLoadEventTest.php
    │   │   │   ├── PrePersistEventTest.php
    │   │   │   ├── PropertyHooksTest.php
    │   │   │   ├── ProxiesLikeEntitiesTest.php
    │   │   │   ├── QueryBuilderParenthesisTest.php
    │   │   │   ├── QueryCacheTest.php
    │   │   │   ├── QueryDqlFunctionTest.php
    │   │   │   ├── QueryIterableTest.php
    │   │   │   ├── QueryParameterTest.php
    │   │   │   ├── QueryTest.php
    │   │   │   ├── ReadOnlyTest.php
    │   │   │   ├── ReadonlyPropertiesTest.php
    │   │   │   ├── ReferenceProxyTest.php
    │   │   │   ├── ResultCacheTest.php
    │   │   │   ├── SQLFilterTest.php
    │   │   │   ├── SchemaTool/
    │   │   │   │   ├── CompanySchemaTest.php
    │   │   │   │   ├── DBAL483Test.php
    │   │   │   │   ├── DDC214Test.php
    │   │   │   │   ├── MySqlSchemaToolTest.php
    │   │   │   │   └── PostgreSqlSchemaToolTest.php
    │   │   │   ├── SchemaValidatorTest.php
    │   │   │   ├── SecondLevelCacheCompositePrimaryKeyTest.php
    │   │   │   ├── SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php
    │   │   │   ├── SecondLevelCacheConcurrentTest.php
    │   │   │   ├── SecondLevelCacheCountQueriesTest.php
    │   │   │   ├── SecondLevelCacheCriteriaTest.php
    │   │   │   ├── SecondLevelCacheExtraLazyCollectionTest.php
    │   │   │   ├── SecondLevelCacheFunctionalTestCase.php
    │   │   │   ├── SecondLevelCacheJoinTableInheritanceTest.php
    │   │   │   ├── SecondLevelCacheManyToManyTest.php
    │   │   │   ├── SecondLevelCacheManyToOneTest.php
    │   │   │   ├── SecondLevelCacheOneToManyTest.php
    │   │   │   ├── SecondLevelCacheOneToOneTest.php
    │   │   │   ├── SecondLevelCacheQueryCacheTest.php
    │   │   │   ├── SecondLevelCacheRepositoryTest.php
    │   │   │   ├── SecondLevelCacheSingleTableInheritanceTest.php
    │   │   │   ├── SecondLevelCacheTest.php
    │   │   │   ├── SequenceGeneratorTest.php
    │   │   │   ├── SingleTableCompositeKeyTest.php
    │   │   │   ├── SingleTableInheritanceTest.php
    │   │   │   ├── StandardEntityPersisterTest.php
    │   │   │   ├── Ticket/
    │   │   │   │   ├── DDC1040Test.php
    │   │   │   │   ├── DDC1041Test.php
    │   │   │   │   ├── DDC1043Test.php
    │   │   │   │   ├── DDC1080Test.php
    │   │   │   │   ├── DDC1113Test.php
    │   │   │   │   ├── DDC1129Test.php
    │   │   │   │   ├── DDC1163Test.php
    │   │   │   │   ├── DDC117Test.php
    │   │   │   │   ├── DDC1181Test.php
    │   │   │   │   ├── DDC1193Test.php
    │   │   │   │   ├── DDC1209Test.php
    │   │   │   │   ├── DDC1225Test.php
    │   │   │   │   ├── DDC1228Test.php
    │   │   │   │   ├── DDC1238Test.php
    │   │   │   │   ├── DDC1250Test.php
    │   │   │   │   ├── DDC1300Test.php
    │   │   │   │   ├── DDC1301Test.php
    │   │   │   │   ├── DDC1306Test.php
    │   │   │   │   ├── DDC1335Test.php
    │   │   │   │   ├── DDC1400Test.php
    │   │   │   │   ├── DDC142Test.php
    │   │   │   │   ├── DDC1430Test.php
    │   │   │   │   ├── DDC1436Test.php
    │   │   │   │   ├── DDC144Test.php
    │   │   │   │   ├── DDC1452Test.php
    │   │   │   │   ├── DDC1454Test.php
    │   │   │   │   ├── DDC1458Test.php
    │   │   │   │   ├── DDC1461Test.php
    │   │   │   │   ├── DDC1514Test.php
    │   │   │   │   ├── DDC1515Test.php
    │   │   │   │   ├── DDC1526Test.php
    │   │   │   │   ├── DDC1545Test.php
    │   │   │   │   ├── DDC1548Test.php
    │   │   │   │   ├── DDC1595Test.php
    │   │   │   │   ├── DDC163Test.php
    │   │   │   │   ├── DDC1643Test.php
    │   │   │   │   ├── DDC1654Test.php
    │   │   │   │   ├── DDC1655Test.php
    │   │   │   │   ├── DDC1666Test.php
    │   │   │   │   ├── DDC1685Test.php
    │   │   │   │   ├── DDC168Test.php
    │   │   │   │   ├── DDC1695Test.php
    │   │   │   │   ├── DDC1707Test.php
    │   │   │   │   ├── DDC1719Test.php
    │   │   │   │   ├── DDC1757Test.php
    │   │   │   │   ├── DDC1778Test.php
    │   │   │   │   ├── DDC1787Test.php
    │   │   │   │   ├── DDC1843Test.php
    │   │   │   │   ├── DDC1884Test.php
    │   │   │   │   ├── DDC1885Test.php
    │   │   │   │   ├── DDC1918Test.php
    │   │   │   │   ├── DDC1925Test.php
    │   │   │   │   ├── DDC192Test.php
    │   │   │   │   ├── DDC1995Test.php
    │   │   │   │   ├── DDC1998Test.php
    │   │   │   │   ├── DDC199Test.php
    │   │   │   │   ├── DDC2012Test.php
    │   │   │   │   ├── DDC2074Test.php
    │   │   │   │   ├── DDC2084Test.php
    │   │   │   │   ├── DDC2090Test.php
    │   │   │   │   ├── DDC2106Test.php
    │   │   │   │   ├── DDC211Test.php
    │   │   │   │   ├── DDC2138Test.php
    │   │   │   │   ├── DDC2175Test.php
    │   │   │   │   ├── DDC2182Test.php
    │   │   │   │   ├── DDC2214Test.php
    │   │   │   │   ├── DDC2224Test.php
    │   │   │   │   ├── DDC2252Test.php
    │   │   │   │   ├── DDC2306Test.php
    │   │   │   │   ├── DDC2346Test.php
    │   │   │   │   ├── DDC2350Test.php
    │   │   │   │   ├── DDC2359Test.php
    │   │   │   │   ├── DDC237Test.php
    │   │   │   │   ├── DDC2387Test.php
    │   │   │   │   ├── DDC2415Test.php
    │   │   │   │   ├── DDC2494Test.php
    │   │   │   │   ├── DDC2519Test.php
    │   │   │   │   ├── DDC2575Test.php
    │   │   │   │   ├── DDC2579Test.php
    │   │   │   │   ├── DDC258Test.php
    │   │   │   │   ├── DDC2602Test.php
    │   │   │   │   ├── DDC2655Test.php
    │   │   │   │   ├── DDC2660Test.php
    │   │   │   │   ├── DDC2692Test.php
    │   │   │   │   ├── DDC2759Test.php
    │   │   │   │   ├── DDC2775Test.php
    │   │   │   │   ├── DDC2780Test.php
    │   │   │   │   ├── DDC2790Test.php
    │   │   │   │   ├── DDC279Test.php
    │   │   │   │   ├── DDC2825Test.php
    │   │   │   │   ├── DDC2862Test.php
    │   │   │   │   ├── DDC2895Test.php
    │   │   │   │   ├── DDC2931Test.php
    │   │   │   │   ├── DDC2943Test.php
    │   │   │   │   ├── DDC2984Test.php
    │   │   │   │   ├── DDC2996Test.php
    │   │   │   │   ├── DDC3033Test.php
    │   │   │   │   ├── DDC3042Test.php
    │   │   │   │   ├── DDC3068Test.php
    │   │   │   │   ├── DDC309Test.php
    │   │   │   │   ├── DDC3103Test.php
    │   │   │   │   ├── DDC3123Test.php
    │   │   │   │   ├── DDC3160Test.php
    │   │   │   │   ├── DDC3170Test.php
    │   │   │   │   ├── DDC3192Test.php
    │   │   │   │   ├── DDC3223Test.php
    │   │   │   │   ├── DDC3300Test.php
    │   │   │   │   ├── DDC3303Test.php
    │   │   │   │   ├── DDC331Test.php
    │   │   │   │   ├── DDC3330Test.php
    │   │   │   │   ├── DDC3346Test.php
    │   │   │   │   ├── DDC345Test.php
    │   │   │   │   ├── DDC353Test.php
    │   │   │   │   ├── DDC3582Test.php
    │   │   │   │   ├── DDC3597Test.php
    │   │   │   │   ├── DDC3634Test.php
    │   │   │   │   ├── DDC3644Test.php
    │   │   │   │   ├── DDC3719Test.php
    │   │   │   │   ├── DDC371Test.php
    │   │   │   │   ├── DDC3785Test.php
    │   │   │   │   ├── DDC381Test.php
    │   │   │   │   ├── DDC3967Test.php
    │   │   │   │   ├── DDC4003Test.php
    │   │   │   │   ├── DDC4024Test.php
    │   │   │   │   ├── DDC422Test.php
    │   │   │   │   ├── DDC425Test.php
    │   │   │   │   ├── DDC440Test.php
    │   │   │   │   ├── DDC444Test.php
    │   │   │   │   ├── DDC448Test.php
    │   │   │   │   ├── DDC493Test.php
    │   │   │   │   ├── DDC512Test.php
    │   │   │   │   ├── DDC513Test.php
    │   │   │   │   ├── DDC522Test.php
    │   │   │   │   ├── DDC531Test.php
    │   │   │   │   ├── DDC5684Test.php
    │   │   │   │   ├── DDC588Test.php
    │   │   │   │   ├── DDC599Test.php
    │   │   │   │   ├── DDC618Test.php
    │   │   │   │   ├── DDC6303Test.php
    │   │   │   │   ├── DDC633Test.php
    │   │   │   │   ├── DDC6460Test.php
    │   │   │   │   ├── DDC6558Test.php
    │   │   │   │   ├── DDC656Test.php
    │   │   │   │   ├── DDC6573Test.php
    │   │   │   │   ├── DDC657Test.php
    │   │   │   │   ├── DDC698Test.php
    │   │   │   │   ├── DDC69Test.php
    │   │   │   │   ├── DDC719Test.php
    │   │   │   │   ├── DDC735Test.php
    │   │   │   │   ├── DDC736Test.php
    │   │   │   │   ├── DDC748Test.php
    │   │   │   │   ├── DDC767Test.php
    │   │   │   │   ├── DDC7969Test.php
    │   │   │   │   ├── DDC809Test.php
    │   │   │   │   ├── DDC812Test.php
    │   │   │   │   ├── DDC832Test.php
    │   │   │   │   ├── DDC837Test.php
    │   │   │   │   ├── DDC849Test.php
    │   │   │   │   ├── DDC881Test.php
    │   │   │   │   ├── DDC933Test.php
    │   │   │   │   ├── DDC949Test.php
    │   │   │   │   ├── DDC960Test.php
    │   │   │   │   ├── DDC992Test.php
    │   │   │   │   ├── GH10049/
    │   │   │   │   │   ├── GH10049Test.php
    │   │   │   │   │   ├── ReadOnlyPropertyInheritor.php
    │   │   │   │   │   └── ReadOnlyPropertyOwner.php
    │   │   │   │   ├── GH10132Test.php
    │   │   │   │   ├── GH10288Test.php
    │   │   │   │   ├── GH10334Test.php
    │   │   │   │   ├── GH10336Test.php
    │   │   │   │   ├── GH10348Test.php
    │   │   │   │   ├── GH10387Test.php
    │   │   │   │   ├── GH10450Test.php
    │   │   │   │   ├── GH10454Test.php
    │   │   │   │   ├── GH10462Test.php
    │   │   │   │   ├── GH10473Test.php
    │   │   │   │   ├── GH10531Test.php
    │   │   │   │   ├── GH10532Test.php
    │   │   │   │   ├── GH10566Test.php
    │   │   │   │   ├── GH10625Test.php
    │   │   │   │   ├── GH10661/
    │   │   │   │   │   ├── GH10661Test.php
    │   │   │   │   │   ├── InvalidChildEntity.php
    │   │   │   │   │   └── InvalidEntity.php
    │   │   │   │   ├── GH10747Test.php
    │   │   │   │   ├── GH10752Test.php
    │   │   │   │   ├── GH10808Test.php
    │   │   │   │   ├── GH10869Test.php
    │   │   │   │   ├── GH10880Test.php
    │   │   │   │   ├── GH10889Test.php
    │   │   │   │   ├── GH10912Test.php
    │   │   │   │   ├── GH10913Test.php
    │   │   │   │   ├── GH10927Test.php
    │   │   │   │   ├── GH11017/
    │   │   │   │   │   ├── GH11017Entity.php
    │   │   │   │   │   ├── GH11017Enum.php
    │   │   │   │   │   └── GH11017Test.php
    │   │   │   │   ├── GH11037/
    │   │   │   │   │   ├── EntityStatus.php
    │   │   │   │   │   ├── GH11037Test.php
    │   │   │   │   │   ├── IntEntityStatus.php
    │   │   │   │   │   ├── InvalidEntityWithTypedEnum.php
    │   │   │   │   │   ├── StringEntityStatus.php
    │   │   │   │   │   └── ValidEntityWithTypedEnum.php
    │   │   │   │   ├── GH11058Test.php
    │   │   │   │   ├── GH11072/
    │   │   │   │   │   ├── GH11072EntityAdvanced.php
    │   │   │   │   │   ├── GH11072EntityBasic.php
    │   │   │   │   │   └── GH11072Test.php
    │   │   │   │   ├── GH11112Test.php
    │   │   │   │   ├── GH11135Test.php
    │   │   │   │   ├── GH11149/
    │   │   │   │   │   ├── EagerProduct.php
    │   │   │   │   │   ├── EagerProductTranslation.php
    │   │   │   │   │   ├── GH11149Test.php
    │   │   │   │   │   └── Locale.php
    │   │   │   │   ├── GH11163Test.php
    │   │   │   │   ├── GH11199Test.php
    │   │   │   │   ├── GH11341Test.php
    │   │   │   │   ├── GH11386/
    │   │   │   │   │   ├── GH11386EntityCart.php
    │   │   │   │   │   ├── GH11386EntityCustomer.php
    │   │   │   │   │   ├── GH11386EnumType.php
    │   │   │   │   │   └── GH11386Test.php
    │   │   │   │   ├── GH11487Test.php
    │   │   │   │   ├── GH11500Test.php
    │   │   │   │   ├── GH11501Test.php
    │   │   │   │   ├── GH11524Test.php
    │   │   │   │   ├── GH11982Test.php
    │   │   │   │   ├── GH12166/
    │   │   │   │   │   ├── GH12166Test.php
    │   │   │   │   │   └── LazyEntityWithReadonlyId.php
    │   │   │   │   ├── GH12174Test.php
    │   │   │   │   ├── GH12183Test.php
    │   │   │   │   ├── GH12254Test.php
    │   │   │   │   ├── GH2947Test.php
    │   │   │   │   ├── GH5562Test.php
    │   │   │   │   ├── GH5742Test.php
    │   │   │   │   ├── GH5762Test.php
    │   │   │   │   ├── GH5804Test.php
    │   │   │   │   ├── GH5887Test.php
    │   │   │   │   ├── GH5988Test.php
    │   │   │   │   ├── GH5998Test.php
    │   │   │   │   ├── GH6029Test.php
    │   │   │   │   ├── GH6123Test.php
    │   │   │   │   ├── GH6141Test.php
    │   │   │   │   ├── GH6217Test.php
    │   │   │   │   ├── GH6362Test.php
    │   │   │   │   ├── GH6394Test.php
    │   │   │   │   ├── GH6402Test.php
    │   │   │   │   ├── GH6464Test.php
    │   │   │   │   ├── GH6499OneToManyRelationshipTest.php
    │   │   │   │   ├── GH6499OneToOneRelationshipTest.php
    │   │   │   │   ├── GH6499Test.php
    │   │   │   │   ├── GH6531Test.php
    │   │   │   │   ├── GH6682Test.php
    │   │   │   │   ├── GH6699Test.php
    │   │   │   │   ├── GH6740Test.php
    │   │   │   │   ├── GH6823Test.php
    │   │   │   │   ├── GH6937Test.php
    │   │   │   │   ├── GH7006Test.php
    │   │   │   │   ├── GH7012Test.php
    │   │   │   │   ├── GH7062Test.php
    │   │   │   │   ├── GH7067Test.php
    │   │   │   │   ├── GH7068Test.php
    │   │   │   │   ├── GH7079Test.php
    │   │   │   │   ├── GH7180Test.php
    │   │   │   │   ├── GH7259Test.php
    │   │   │   │   ├── GH7286Test.php
    │   │   │   │   ├── GH7366Test.php
    │   │   │   │   ├── GH7496WithToIterableTest.php
    │   │   │   │   ├── GH7505Test.php
    │   │   │   │   ├── GH7512Test.php
    │   │   │   │   ├── GH7629Test.php
    │   │   │   │   ├── GH7661Test.php
    │   │   │   │   ├── GH7684Test.php
    │   │   │   │   ├── GH7717Test.php
    │   │   │   │   ├── GH7735Test.php
    │   │   │   │   ├── GH7737Test.php
    │   │   │   │   ├── GH7761Test.php
    │   │   │   │   ├── GH7767Test.php
    │   │   │   │   ├── GH7820Test.php
    │   │   │   │   ├── GH7829Test.php
    │   │   │   │   ├── GH7836Test.php
    │   │   │   │   ├── GH7864Test.php
    │   │   │   │   ├── GH7869Test.php
    │   │   │   │   ├── GH7875Test.php
    │   │   │   │   ├── GH7941Test.php
    │   │   │   │   ├── GH8055Test.php
    │   │   │   │   ├── GH8061Test.php
    │   │   │   │   ├── GH8127Test.php
    │   │   │   │   ├── GH8217Test.php
    │   │   │   │   ├── GH8415Test.php
    │   │   │   │   ├── GH8415ToManyAssociationTest.php
    │   │   │   │   ├── GH8443Test.php
    │   │   │   │   ├── GH8499Test.php
    │   │   │   │   ├── GH8663Test.php
    │   │   │   │   ├── GH8914Test.php
    │   │   │   │   ├── GH9027Test.php
    │   │   │   │   ├── GH9109Test.php
    │   │   │   │   ├── GH9192Test.php
    │   │   │   │   ├── GH9230Test.php
    │   │   │   │   ├── GH9335Test.php
    │   │   │   │   ├── GH9467/
    │   │   │   │   │   ├── GH9467Test.php
    │   │   │   │   │   ├── JoinedInheritanceChild.php
    │   │   │   │   │   ├── JoinedInheritanceNonInsertableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceNonUpdatableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceNonWritableColumn.php
    │   │   │   │   │   ├── JoinedInheritanceRoot.php
    │   │   │   │   │   └── JoinedInheritanceWritableColumn.php
    │   │   │   │   ├── GH9516Test.php
    │   │   │   │   ├── GH9579Test.php
    │   │   │   │   ├── GH9807Test.php
    │   │   │   │   ├── Issue5989Test.php
    │   │   │   │   ├── Issue9300Test.php
    │   │   │   │   ├── SwitchContextWithFilter/
    │   │   │   │   │   ├── AbstractTestCase.php
    │   │   │   │   │   ├── ChangeFiltersTest.php
    │   │   │   │   │   ├── Entity/
    │   │   │   │   │   │   ├── Insurance.php
    │   │   │   │   │   │   ├── Order.php
    │   │   │   │   │   │   ├── Patient.php
    │   │   │   │   │   │   ├── PatientInsurance.php
    │   │   │   │   │   │   ├── Practice.php
    │   │   │   │   │   │   ├── PrimaryPatInsurance.php
    │   │   │   │   │   │   ├── SecondaryPatInsurance.php
    │   │   │   │   │   │   └── User.php
    │   │   │   │   │   ├── SQLFilter/
    │   │   │   │   │   │   ├── CompanySQLFilter.php
    │   │   │   │   │   │   └── PracticeContextSQLFilter.php
    │   │   │   │   │   └── SwitchContextTest.php
    │   │   │   │   ├── SwitchContextWithFilterAndIndexedRelation/
    │   │   │   │   │   ├── Category.php
    │   │   │   │   │   ├── CategoryTypeSQLFilter.php
    │   │   │   │   │   ├── ChangeFiltersTest.php
    │   │   │   │   │   └── Company.php
    │   │   │   │   ├── Ticket2481Test.php
    │   │   │   │   ├── Ticket4646InstanceOfAbstractTest.php
    │   │   │   │   ├── Ticket4646InstanceOfMultiLevelTest.php
    │   │   │   │   ├── Ticket4646InstanceOfParametricTest.php
    │   │   │   │   ├── Ticket4646InstanceOfTest.php
    │   │   │   │   └── Ticket4646InstanceOfWithMultipleParametersTest.php
    │   │   │   ├── TypeTest.php
    │   │   │   ├── TypeValueSqlTest.php
    │   │   │   ├── UnitOfWorkLifecycleTest.php
    │   │   │   ├── ValueConversionType/
    │   │   │   │   ├── ManyToManyCompositeIdForeignKeyTest.php
    │   │   │   │   ├── ManyToManyCompositeIdTest.php
    │   │   │   │   ├── ManyToManyCriteriaMatchingTest.php
    │   │   │   │   ├── ManyToManyExtraLazyTest.php
    │   │   │   │   ├── ManyToManyTest.php
    │   │   │   │   ├── OneToManyCompositeIdForeignKeyTest.php
    │   │   │   │   ├── OneToManyCompositeIdTest.php
    │   │   │   │   ├── OneToManyCriteriaMatchingTest.php
    │   │   │   │   ├── OneToManyExtraLazyTest.php
    │   │   │   │   ├── OneToManyTest.php
    │   │   │   │   ├── OneToOneCompositeIdForeignKeyTest.php
    │   │   │   │   ├── OneToOneCompositeIdTest.php
    │   │   │   │   └── OneToOneTest.php
    │   │   │   ├── ValueObjectsTest.php
    │   │   │   └── VersionedOneToOneTest.php
    │   │   ├── Hydration/
    │   │   │   ├── AbstractHydratorTest.php
    │   │   │   ├── ArrayHydratorTest.php
    │   │   │   ├── CustomHydratorTest.php
    │   │   │   ├── HydrationTestCase.php
    │   │   │   ├── ObjectHydratorTest.php
    │   │   │   ├── ResultSetMappingTest.php
    │   │   │   ├── ScalarColumnHydratorTest.php
    │   │   │   ├── ScalarHydratorTest.php
    │   │   │   ├── SimpleObjectHydratorTest.php
    │   │   │   └── SingleScalarHydratorTest.php
    │   │   ├── Id/
    │   │   │   ├── AssignedGeneratorTest.php
    │   │   │   └── SequenceGeneratorTest.php
    │   │   ├── Internal/
    │   │   │   ├── HydrationCompleteHandlerTest.php
    │   │   │   ├── Node.php
    │   │   │   ├── StronglyConnectedComponentsTest.php
    │   │   │   ├── TopologicalSortTest.php
    │   │   │   └── UnitOfWork/
    │   │   │       └── InsertBatchTest.php
    │   │   ├── LazyCriteriaCollectionTest.php
    │   │   ├── Mapping/
    │   │   │   ├── AnsiQuoteStrategyTest.php
    │   │   │   ├── AssociationMappingTest.php
    │   │   │   ├── AttributeDriverTest.php
    │   │   │   ├── AttributeReaderTest.php
    │   │   │   ├── BasicInheritanceMappingTest.php
    │   │   │   ├── ClassMetadataBuilderTest.php
    │   │   │   ├── ClassMetadataFactoryTest.php
    │   │   │   ├── ClassMetadataLoadEventTest.php
    │   │   │   ├── ClassMetadataTest.php
    │   │   │   ├── DefaultQuoteStrategyTest.php
    │   │   │   ├── DiscriminatorColumnMappingTest.php
    │   │   │   ├── EmbeddedClassMappingTest.php
    │   │   │   ├── EntityListenerResolverTest.php
    │   │   │   ├── FieldBuilderTest.php
    │   │   │   ├── FieldMappingTest.php
    │   │   │   ├── Fixtures/
    │   │   │   │   └── AttributeEntityWithNestedJoinColumns.php
    │   │   │   ├── InverseSideMappingTest.php
    │   │   │   ├── JoinColumnMappingTest.php
    │   │   │   ├── JoinTableMappingTest.php
    │   │   │   ├── ManyToManyOwningSideMappingTest.php
    │   │   │   ├── ManyToOneAssociationMappingTest.php
    │   │   │   ├── MappingDriverTestCase.php
    │   │   │   ├── NamingStrategy/
    │   │   │   │   ├── CustomPascalNamingStrategy.php
    │   │   │   │   └── JoinColumnClassNamingStrategy.php
    │   │   │   ├── NamingStrategyTest.php
    │   │   │   ├── OneToOneOwningSideMappingTest.php
    │   │   │   ├── OwningSideMappingTest.php
    │   │   │   ├── PropertyAccessors/
    │   │   │   │   ├── EnumPropertyAccessorTest.php
    │   │   │   │   ├── ObjectCastPropertyAccessorTest.php
    │   │   │   │   ├── RawValuePropertyAccessorTest.php
    │   │   │   │   ├── ReadOnlyAccessorTest.php
    │   │   │   │   └── TypedNoDefaultPropertyAccessorTest.php
    │   │   │   ├── QuoteStrategyTest.php
    │   │   │   ├── ReflectionEmbeddedPropertyTest.php
    │   │   │   ├── ReflectionReadonlyPropertyTest.php
    │   │   │   ├── StaticPHPMappingDriverTest.php
    │   │   │   ├── Symfony/
    │   │   │   │   ├── DriverTestCase.php
    │   │   │   │   └── XmlDriverTest.php
    │   │   │   ├── TableMappingTest.php
    │   │   │   ├── ToManyAssociationMappingTest.php
    │   │   │   ├── TypedEnumFieldMapperTest.php
    │   │   │   ├── TypedFieldMapper/
    │   │   │   │   └── CustomIntAsStringTypedFieldMapper.php
    │   │   │   ├── TypedFieldMapperTest.php
    │   │   │   ├── XmlMappingDriverTest.php
    │   │   │   ├── invalid_xml/
    │   │   │   │   └── Doctrine.Tests.Models.InvalidXml.dcm.xml
    │   │   │   ├── php/
    │   │   │   │   ├── Doctrine.Tests.Models.Enums.Card.php
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.php
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Insertable.php
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Updatable.php
    │   │   │   │   └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.php
    │   │   │   ├── xml/
    │   │   │   │   ├── CatNoId.dcm.xml
    │   │   │   │   ├── DDC2429Book.orm.xml
    │   │   │   │   ├── DDC2429Novel.orm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.CMS.CmsUser.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Cache.City.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFixContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Company.CompanyPerson.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Customer.CustomerType.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC117.DDC117Translation.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889Class.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Enums.Card.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.GH7141.GH7141Article.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.GH7316.GH7316Article.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Generic.BooleanModel.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Project.Project.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Project.ProjectInvalidMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTyped.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Insertable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.Upsertable.Updatable.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.ValueObjects.Name.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.Models.ValueObjects.Person.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Functional.XmlLegacyTimeEntity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Functional.XmlTimeEntity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.Animal.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.BlogPost.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.BlogPostComment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.CTI.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.Comment.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.ReservedWordInTableColumn.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.User.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectAttributes.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectIndex.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserIncorrectUniqueConstraint.dcm.xml
    │   │   │   │   ├── Doctrine.Tests.ORM.Mapping.UserMissingAttributes.dcm.xml
    │   │   │   │   └── Doctrine.Tests.ORM.Mapping.XMLSLC.dcm.xml
    │   │   │   └── yaml/
    │   │   │       ├── Doctrine.Tests.Models.TypedProperties.UserTypedWithCustomTypedField.dcm.yml
    │   │   │       └── Doctrine.Tests.ORM.Mapping.GH10288EnumTypePerson.dcm.yml
    │   │   ├── ORMInvalidArgumentExceptionTest.php
    │   │   ├── ORMSetupTest.php
    │   │   ├── Performance/
    │   │   │   └── SecondLevelCacheTest.php
    │   │   ├── PersistentCollectionTest.php
    │   │   ├── Persisters/
    │   │   │   ├── BasicEntityPersisterCompositeTypeParametersTest.php
    │   │   │   ├── BasicEntityPersisterCompositeTypeSqlTest.php
    │   │   │   ├── BasicEntityPersisterTypeValueSqlTest.php
    │   │   │   ├── BinaryIdPersisterTest.php
    │   │   │   ├── Exception/
    │   │   │   │   └── UnrecognizedFieldTest.php
    │   │   │   └── ManyToManyPersisterTest.php
    │   │   ├── Proxy/
    │   │   │   └── ProxyFactoryTest.php
    │   │   ├── Query/
    │   │   │   ├── CustomTreeWalkersJoinTest.php
    │   │   │   ├── CustomTreeWalkersTest.php
    │   │   │   ├── DeleteSqlGenerationTest.php
    │   │   │   ├── ExprTest.php
    │   │   │   ├── FilterCollectionTest.php
    │   │   │   ├── LanguageRecognitionTest.php
    │   │   │   ├── LexerTest.php
    │   │   │   ├── NativeQueryTest.php
    │   │   │   ├── ParameterTypeInfererTest.php
    │   │   │   ├── ParserResultTest.php
    │   │   │   ├── ParserTest.php
    │   │   │   ├── QueryExpressionVisitorTest.php
    │   │   │   ├── QueryTest.php
    │   │   │   ├── SelectSqlGenerationTest.php
    │   │   │   ├── SqlExpressionVisitorTest.php
    │   │   │   ├── SqlWalkerTest.php
    │   │   │   └── UpdateSqlGenerationTest.php
    │   │   ├── QueryBuilderTest.php
    │   │   ├── Repository/
    │   │   │   └── DefaultRepositoryFactoryTest.php
    │   │   ├── Tools/
    │   │   │   ├── AttachEntityListenersListenerTest.php
    │   │   │   ├── Console/
    │   │   │   │   ├── Command/
    │   │   │   │   │   ├── ClearCacheCollectionRegionCommandTest.php
    │   │   │   │   │   ├── ClearCacheEntityRegionCommandTest.php
    │   │   │   │   │   ├── ClearCacheQueryRegionCommandTest.php
    │   │   │   │   │   ├── Debug/
    │   │   │   │   │   │   ├── DebugEntityListenersDoctrineCommandTest.php
    │   │   │   │   │   │   ├── DebugEventManagerDoctrineCommandTest.php
    │   │   │   │   │   │   └── Fixtures/
    │   │   │   │   │   │       ├── BarListener.php
    │   │   │   │   │   │       ├── BazListener.php
    │   │   │   │   │   │       └── FooListener.php
    │   │   │   │   │   ├── InfoCommandTest.php
    │   │   │   │   │   ├── MappingDescribeCommandTest.php
    │   │   │   │   │   ├── RunDqlCommandTest.php
    │   │   │   │   │   ├── SchemaTool/
    │   │   │   │   │   │   ├── CommandTestCase.php
    │   │   │   │   │   │   ├── CreateCommandTest.php
    │   │   │   │   │   │   ├── DropCommandTest.php
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       └── Keyboard.php
    │   │   │   │   │   └── ValidateSchemaCommandTest.php
    │   │   │   │   ├── ConsoleRunnerTest.php
    │   │   │   │   └── MetadataFilterTest.php
    │   │   │   ├── DebugTest.php
    │   │   │   ├── Pagination/
    │   │   │   │   ├── CountOutputWalkerTest.php
    │   │   │   │   ├── CountWalkerTest.php
    │   │   │   │   ├── LimitSubqueryOutputWalkerTest.php
    │   │   │   │   ├── LimitSubqueryWalkerTest.php
    │   │   │   │   ├── PaginationTestCase.php
    │   │   │   │   ├── PaginatorTest.php
    │   │   │   │   ├── RootTypeWalkerTest.php
    │   │   │   │   └── WhereInWalkerTest.php
    │   │   │   ├── ResolveTargetEntityListenerTest.php
    │   │   │   ├── SchemaToolTest.php
    │   │   │   ├── SchemaValidatorTest.php
    │   │   │   └── TestAsset/
    │   │   │       ├── ChildClass.php
    │   │   │       ├── ChildWithSameAttributesClass.php
    │   │   │       └── ParentClass.php
    │   │   ├── UnitOfWorkTest.php
    │   │   └── Utility/
    │   │       ├── HierarchyDiscriminatorResolverTest.php
    │   │       ├── IdentifierFlattenerEnumIdTest.php
    │   │       └── IdentifierFlattenerTest.php
    │   ├── OrmFunctionalTestCase.php
    │   ├── OrmTestCase.php
    │   ├── Proxy/
    │   │   └── AutoloaderTest.php
    │   ├── TestInit.php
    │   └── TestUtil.php
    └── dbproperties.xml.dev
Download .txt
Showing preview only (985K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10195 symbols across 1451 files)

FILE: docs/en/cookbook/dql-custom-walkers/InterpolateParametersSQLOutputWalker.php
  class InterpolateParametersSQLOutputWalker (line 10) | class InterpolateParametersSQLOutputWalker extends SqlOutputWalker
    method walkInputParameter (line 13) | public function walkInputParameter(AST\InputParameter $inputParam): st...

FILE: docs/en/cookbook/generated-columns/Article.php
  class Article (line 7) | #[ORM\Entity]

FILE: docs/en/cookbook/generated-columns/Person.php
  class Person (line 7) | #[ORM\Entity]

FILE: docs/en/reference/basic-mapping/DefaultValues.php
  class Message (line 12) | #[Entity]

FILE: docs/en/tutorials/working-with-indexed-associations/Market.php
  class Market (line 17) | #[Entity]
    method __construct (line 33) | public function __construct(string $name)
    method getId (line 39) | public function getId(): int|null
    method getName (line 44) | public function getName(): string
    method addStock (line 49) | public function addStock(Stock $stock): void
    method getStock (line 54) | public function getStock(string $symbol): Stock
    method getStocks (line 64) | public function getStocks(): array

FILE: src/AbstractQuery.php
  class AbstractQuery (line 47) | abstract class AbstractQuery
    method __construct (line 143) | public function __construct(
    method setCacheable (line 165) | public function setCacheable(bool $cacheable): static
    method isCacheable (line 173) | public function isCacheable(): bool
    method setCacheRegion (line 179) | public function setCacheRegion(string $cacheRegion): static
    method getCacheRegion (line 191) | public function getCacheRegion(): string|null
    method isCacheEnabled (line 197) | protected function isCacheEnabled(): bool
    method getLifetime (line 202) | public function getLifetime(): int
    method setLifetime (line 212) | public function setLifetime(int $lifetime): static
    method getCacheMode (line 220) | public function getCacheMode(): int|null
    method setCacheMode (line 230) | public function setCacheMode(int $cacheMode): static
    method getSQL (line 244) | abstract public function getSQL(): string|array;
    method getEntityManager (line 249) | public function getEntityManager(): EntityManagerInterface
    method free (line 259) | public function free(): void
    method getParameters (line 271) | public function getParameters(): ArrayCollection
    method getParameter (line 283) | public function getParameter(int|string $key): Parameter|null
    method setParameters (line 302) | public function setParameters(ArrayCollection|array $parameters): static
    method setParameter (line 332) | public function setParameter(string|int $key, mixed $value, ParameterT...
    method processParameterValue (line 352) | public function processParameterValue(mixed $value): mixed
    method potentiallyProcessIterable (line 403) | private function potentiallyProcessIterable(mixed $value): mixed
    method processArrayParameterValue (line 420) | private function processArrayParameterValue(array $value): array
    method setResultSetMapping (line 435) | public function setResultSetMapping(ResultSetMapping $rsm): static
    method getResultSetMapping (line 446) | protected function getResultSetMapping(): ResultSetMapping|null
    method translateNamespaces (line 454) | private function translateNamespaces(ResultSetMapping $rsm): void
    method setHydrationCacheProfile (line 482) | public function setHydrationCacheProfile(QueryCacheProfile|null $profi...
    method getHydrationCacheProfile (line 502) | public function getHydrationCacheProfile(): QueryCacheProfile|null
    method setResultCacheProfile (line 515) | public function setResultCacheProfile(QueryCacheProfile|null $profile)...
    method setResultCache (line 538) | public function setResultCache(CacheItemPoolInterface|null $resultCach...
    method enableResultCache (line 564) | public function enableResultCache(int|null $lifetime = null, string|nu...
    method disableResultCache (line 577) | public function disableResultCache(): static
    method setResultCacheLifetime (line 591) | public function setResultCacheLifetime(int|null $lifetime): static
    method expireResultCache (line 620) | public function expireResultCache(bool $expire = true): static
    method getExpireResultCache (line 630) | public function getExpireResultCache(): bool
    method getQueryCacheProfile (line 635) | public function getQueryCacheProfile(): QueryCacheProfile|null
    method setFetchMode (line 646) | public function setFetchMode(string $class, string $assocName, int $fe...
    method setHydrationMode (line 662) | public function setHydrationMode(string|int $hydrationMode): static
    method getHydrationMode (line 674) | public function getHydrationMode(): string|int
    method getResult (line 686) | public function getResult(string|int $hydrationMode = self::HYDRATE_OB...
    method getArrayResult (line 698) | public function getArrayResult(): array
    method getSingleColumnResult (line 710) | public function getSingleColumnResult(): array
    method getScalarResult (line 722) | public function getScalarResult(): array
    method getOneOrNullResult (line 734) | public function getOneOrNullResult(string|int|null $hydrationMode = nu...
    method getSingleResult (line 770) | public function getSingleResult(string|int|null $hydrationMode = null)...
    method getSingleScalarResult (line 799) | public function getSingleScalarResult(): mixed
    method setHint (line 809) | public function setHint(string $name, mixed $value): static
    method getHint (line 821) | public function getHint(string $name): mixed
    method hasHint (line 826) | public function hasHint(string $name): bool
    method getHints (line 836) | public function getHints(): array
    method toIterable (line 850) | public function toIterable(
    method execute (line 878) | public function execute(
    method executeIgnoreQueryCache (line 895) | private function executeIgnoreQueryCache(
    method getHydrationCache (line 950) | private function getHydrationCache(): CacheItemPoolInterface
    method executeUsingQueryCache (line 966) | private function executeUsingQueryCache(
    method getTimestampKey (line 1007) | private function getTimestampKey(): TimestampCacheKey|null
    method getHydrationCacheId (line 1029) | protected function getHydrationCacheId(): array
    method setResultCacheId (line 1056) | public function setResultCacheId(string|null $id): static
    method _doExecute (line 1074) | abstract protected function _doExecute(): Result|int;
    method __clone (line 1079) | public function __clone()
    method getHash (line 1090) | protected function getHash(): string

FILE: src/Cache.php
  type Cache (line 13) | interface Cache
    method getEntityCacheRegion (line 41) | public function getEntityCacheRegion(string $className): Region|null;
    method getCollectionCacheRegion (line 43) | public function getCollectionCacheRegion(string $className, string $as...
    method containsEntity (line 48) | public function containsEntity(string $className, mixed $identifier): ...
    method evictEntity (line 53) | public function evictEntity(string $className, mixed $identifier): void;
    method evictEntityRegion (line 58) | public function evictEntityRegion(string $className): void;
    method evictEntityRegions (line 63) | public function evictEntityRegions(): void;
    method containsCollection (line 68) | public function containsCollection(string $className, string $associat...
    method evictCollection (line 73) | public function evictCollection(string $className, string $association...
    method evictCollectionRegion (line 78) | public function evictCollectionRegion(string $className, string $assoc...
    method evictCollectionRegions (line 83) | public function evictCollectionRegions(): void;
    method containsQuery (line 88) | public function containsQuery(string $regionName): bool;
    method evictQueryRegion (line 93) | public function evictQueryRegion(string|null $regionName = null): void;
    method evictQueryRegions (line 98) | public function evictQueryRegions(): void;
    method getQueryCache (line 105) | public function getQueryCache(string|null $regionName = null): QueryCa...

FILE: src/Cache/AssociationCacheEntry.php
  class AssociationCacheEntry (line 7) | class AssociationCacheEntry implements CacheEntry
    method __construct (line 13) | public function __construct(
    method __set_state (line 26) | public static function __set_state(array $values): self

FILE: src/Cache/CacheConfiguration.php
  class CacheConfiguration (line 12) | class CacheConfiguration
    method getCacheFactory (line 19) | public function getCacheFactory(): CacheFactory|null
    method setCacheFactory (line 24) | public function setCacheFactory(CacheFactory $factory): void
    method getCacheLogger (line 29) | public function getCacheLogger(): CacheLogger|null
    method setCacheLogger (line 34) | public function setCacheLogger(CacheLogger $logger): void
    method getRegionsConfiguration (line 39) | public function getRegionsConfiguration(): RegionsConfiguration
    method setRegionsConfiguration (line 44) | public function setRegionsConfiguration(RegionsConfiguration $regionsC...
    method getQueryValidator (line 49) | public function getQueryValidator(): QueryCacheValidator
    method setQueryValidator (line 56) | public function setQueryValidator(QueryCacheValidator $validator): void

FILE: src/Cache/CacheEntry.php
  type CacheEntry (line 14) | interface CacheEntry

FILE: src/Cache/CacheException.php
  class CacheException (line 15) | class CacheException extends LogicException implements ORMException
    method updateReadOnlyCollection (line 17) | public static function updateReadOnlyCollection(string $sourceEntity, ...
    method nonCacheableEntity (line 22) | public static function nonCacheableEntity(string $entityName): self

FILE: src/Cache/CacheFactory.php
  type CacheFactory (line 19) | interface CacheFactory
    method buildCachedEntityPersister (line 24) | public function buildCachedEntityPersister(EntityManagerInterface $em,...
    method buildCachedCollectionPersister (line 27) | public function buildCachedCollectionPersister(
    method buildQueryCache (line 36) | public function buildQueryCache(EntityManagerInterface $em, string|nul...
    method buildEntityHydrator (line 41) | public function buildEntityHydrator(EntityManagerInterface $em, ClassM...
    method buildCollectionHydrator (line 46) | public function buildCollectionHydrator(EntityManagerInterface $em, As...
    method getRegion (line 53) | public function getRegion(array $cache): Region;
    method getTimestampRegion (line 58) | public function getTimestampRegion(): TimestampRegion;
    method createCache (line 63) | public function createCache(EntityManagerInterface $entityManager): Ca...

FILE: src/Cache/CacheKey.php
  class CacheKey (line 11) | abstract class CacheKey
    method __construct (line 13) | public function __construct(public readonly string $hash)

FILE: src/Cache/CollectionCacheEntry.php
  class CollectionCacheEntry (line 7) | class CollectionCacheEntry implements CacheEntry
    method __construct (line 10) | public function __construct(public readonly array $identifiers)
    method __set_state (line 21) | public static function __set_state(array $values): CollectionCacheEntry

FILE: src/Cache/CollectionCacheKey.php
  class CollectionCacheKey (line 15) | class CollectionCacheKey extends CacheKey
    method __construct (line 28) | public function __construct(

FILE: src/Cache/CollectionHydrator.php
  type CollectionHydrator (line 14) | interface CollectionHydrator
    method buildCacheEntry (line 17) | public function buildCacheEntry(ClassMetadata $metadata, CollectionCac...
    method loadCacheEntry (line 20) | public function loadCacheEntry(ClassMetadata $metadata, CollectionCach...

FILE: src/Cache/ConcurrentRegion.php
  type ConcurrentRegion (line 14) | interface ConcurrentRegion extends Region
    method lock (line 25) | public function lock(CacheKey $key): Lock|null;
    method unlock (line 35) | public function unlock(CacheKey $key, Lock $lock): bool;

FILE: src/Cache/DefaultCache.php
  class DefaultCache (line 21) | class DefaultCache implements Cache
    method __construct (line 34) | public function __construct(
    method getEntityCacheRegion (line 43) | public function getEntityCacheRegion(string $className): Region|null
    method getCollectionCacheRegion (line 55) | public function getCollectionCacheRegion(string $className, string $as...
    method containsEntity (line 67) | public function containsEntity(string $className, mixed $identifier): ...
    method evictEntity (line 79) | public function evictEntity(string $className, mixed $identifier): void
    method evictEntityRegion (line 91) | public function evictEntityRegion(string $className): void
    method evictEntityRegions (line 103) | public function evictEntityRegions(): void
    method containsCollection (line 118) | public function containsCollection(string $className, string $associat...
    method evictCollection (line 130) | public function evictCollection(string $className, string $association...
    method evictCollectionRegion (line 142) | public function evictCollectionRegion(string $className, string $assoc...
    method evictCollectionRegions (line 154) | public function evictCollectionRegions(): void
    method containsQuery (line 175) | public function containsQuery(string $regionName): bool
    method evictQueryRegion (line 180) | public function evictQueryRegion(string|null $regionName = null): void
    method evictQueryRegions (line 193) | public function evictQueryRegions(): void
    method getQueryCache (line 202) | public function getQueryCache(string|null $regionName = null): QueryCache
    method buildEntityCacheKey (line 211) | private function buildEntityCacheKey(ClassMetadata $metadata, mixed $i...
    method buildCollectionCacheKey (line 220) | private function buildCollectionCacheKey(
    method toIdentifierArray (line 233) | private function toIdentifierArray(ClassMetadata $metadata, mixed $ide...

FILE: src/Cache/DefaultCacheFactory.php
  class DefaultCacheFactory (line 33) | class DefaultCacheFactory implements CacheFactory
    method __construct (line 42) | public function __construct(private readonly RegionsConfiguration $reg...
    method setFileLockRegionDirectory (line 46) | public function setFileLockRegionDirectory(string $fileLockRegionDirec...
    method getFileLockRegionDirectory (line 51) | public function getFileLockRegionDirectory(): string|null
    method setRegion (line 56) | public function setRegion(Region $region): void
    method setTimestampRegion (line 61) | public function setTimestampRegion(TimestampRegion $region): void
    method buildCachedEntityPersister (line 66) | public function buildCachedEntityPersister(EntityManagerInterface $em,...
    method buildCachedCollectionPersister (line 91) | public function buildCachedCollectionPersister(
    method buildQueryCache (line 119) | public function buildQueryCache(EntityManagerInterface $em, string|nul...
    method buildCollectionHydrator (line 132) | public function buildCollectionHydrator(EntityManagerInterface $em, As...
    method buildEntityHydrator (line 137) | public function buildEntityHydrator(EntityManagerInterface $em, ClassM...
    method getRegion (line 145) | public function getRegion(array $cache): Region
    method getTimestampRegion (line 173) | public function getTimestampRegion(): TimestampRegion
    method createCache (line 185) | public function createCache(EntityManagerInterface $entityManager): Cache

FILE: src/Cache/DefaultCollectionHydrator.php
  class DefaultCollectionHydrator (line 20) | class DefaultCollectionHydrator implements CollectionHydrator
    method __construct (line 27) | public function __construct(
    method buildCacheEntry (line 33) | public function buildCacheEntry(ClassMetadata $metadata, CollectionCac...
    method loadCacheEntry (line 44) | public function loadCacheEntry(ClassMetadata $metadata, CollectionCach...

FILE: src/Cache/DefaultEntityHydrator.php
  class DefaultEntityHydrator (line 22) | class DefaultEntityHydrator implements EntityHydrator
    method __construct (line 30) | public function __construct(
    method buildCacheEntry (line 37) | public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKe...
    method loadCacheEntry (line 128) | public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey...

FILE: src/Cache/DefaultQueryCache.php
  class DefaultQueryCache (line 34) | class DefaultQueryCache implements QueryCache
    method __construct (line 43) | public function __construct(
    method get (line 57) | public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $...
    method put (line 200) | public function put(QueryCacheKey $key, ResultSetMapping $rsm, mixed $...
    method storeAssociationCache (line 301) | private function storeAssociationCache(QueryCacheKey $key, Association...
    method getAssociationValue (line 351) | private function getAssociationValue(
    method getAssociationPathValue (line 380) | private function getAssociationPathValue(mixed $value, array $path): a...
    method clear (line 409) | public function clear(): bool
    method getRegion (line 414) | public function getRegion(): Region

FILE: src/Cache/EntityCacheEntry.php
  class EntityCacheEntry (line 11) | class EntityCacheEntry implements CacheEntry
    method __construct (line 17) | public function __construct(
    method __set_state (line 30) | public static function __set_state(array $values): self
    method resolveAssociationEntries (line 40) | public function resolveAssociationEntries(EntityManagerInterface $em):...

FILE: src/Cache/EntityCacheKey.php
  class EntityCacheKey (line 15) | class EntityCacheKey extends CacheKey
    method __construct (line 28) | public function __construct(

FILE: src/Cache/EntityHydrator.php
  type EntityHydrator (line 12) | interface EntityHydrator
    method buildCacheEntry (line 19) | public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKe...
    method loadCacheEntry (line 27) | public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey...

FILE: src/Cache/Exception/CacheException.php
  class CacheException (line 12) | class CacheException extends BaseCacheException

FILE: src/Cache/Exception/CannotUpdateReadOnlyCollection.php
  class CannotUpdateReadOnlyCollection (line 9) | class CannotUpdateReadOnlyCollection extends CacheException
    method fromEntityAndField (line 11) | public static function fromEntityAndField(string $sourceEntity, string...

FILE: src/Cache/Exception/CannotUpdateReadOnlyEntity.php
  class CannotUpdateReadOnlyEntity (line 9) | class CannotUpdateReadOnlyEntity extends CacheException
    method fromEntity (line 11) | public static function fromEntity(string $entityName): self

FILE: src/Cache/Exception/FeatureNotImplemented.php
  class FeatureNotImplemented (line 7) | class FeatureNotImplemented extends CacheException
    method scalarResults (line 9) | public static function scalarResults(): self
    method multipleRootEntities (line 14) | public static function multipleRootEntities(): self
    method nonSelectStatements (line 19) | public static function nonSelectStatements(): self
    method partialEntities (line 24) | public static function partialEntities(): self

FILE: src/Cache/Exception/NonCacheableEntity.php
  class NonCacheableEntity (line 9) | class NonCacheableEntity extends CacheException
    method fromEntity (line 11) | public static function fromEntity(string $entityName): self

FILE: src/Cache/Exception/NonCacheableEntityAssociation.php
  class NonCacheableEntityAssociation (line 9) | class NonCacheableEntityAssociation extends CacheException
    method fromEntityAndField (line 11) | public static function fromEntityAndField(string $entityName, string $...

FILE: src/Cache/Lock.php
  class Lock (line 10) | class Lock
    method __construct (line 14) | public function __construct(
    method createLockRead (line 21) | public static function createLockRead(): Lock

FILE: src/Cache/LockException.php
  class LockException (line 12) | class LockException extends CacheException

FILE: src/Cache/Logging/CacheLogger.php
  type CacheLogger (line 14) | interface CacheLogger
    method entityCachePut (line 19) | public function entityCachePut(string $regionName, EntityCacheKey $key...
    method entityCacheHit (line 24) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
    method entityCacheMiss (line 29) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
    method collectionCachePut (line 34) | public function collectionCachePut(string $regionName, CollectionCache...
    method collectionCacheHit (line 39) | public function collectionCacheHit(string $regionName, CollectionCache...
    method collectionCacheMiss (line 44) | public function collectionCacheMiss(string $regionName, CollectionCach...
    method queryCachePut (line 49) | public function queryCachePut(string $regionName, QueryCacheKey $key):...
    method queryCacheHit (line 54) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
    method queryCacheMiss (line 59) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...

FILE: src/Cache/Logging/CacheLoggerChain.php
  class CacheLoggerChain (line 11) | class CacheLoggerChain implements CacheLogger
    method setLogger (line 16) | public function setLogger(string $name, CacheLogger $logger): void
    method getLogger (line 21) | public function getLogger(string $name): CacheLogger|null
    method getLoggers (line 27) | public function getLoggers(): array
    method collectionCacheHit (line 32) | public function collectionCacheHit(string $regionName, CollectionCache...
    method collectionCacheMiss (line 39) | public function collectionCacheMiss(string $regionName, CollectionCach...
    method collectionCachePut (line 46) | public function collectionCachePut(string $regionName, CollectionCache...
    method entityCacheHit (line 53) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
    method entityCacheMiss (line 60) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
    method entityCachePut (line 67) | public function entityCachePut(string $regionName, EntityCacheKey $key...
    method queryCacheHit (line 74) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
    method queryCacheMiss (line 81) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...
    method queryCachePut (line 88) | public function queryCachePut(string $regionName, QueryCacheKey $key):...

FILE: src/Cache/Logging/StatisticsCacheLogger.php
  class StatisticsCacheLogger (line 16) | class StatisticsCacheLogger implements CacheLogger
    method collectionCacheMiss (line 27) | public function collectionCacheMiss(string $regionName, CollectionCach...
    method collectionCacheHit (line 33) | public function collectionCacheHit(string $regionName, CollectionCache...
    method collectionCachePut (line 39) | public function collectionCachePut(string $regionName, CollectionCache...
    method entityCacheMiss (line 45) | public function entityCacheMiss(string $regionName, EntityCacheKey $ke...
    method entityCacheHit (line 51) | public function entityCacheHit(string $regionName, EntityCacheKey $key...
    method entityCachePut (line 57) | public function entityCachePut(string $regionName, EntityCacheKey $key...
    method queryCacheHit (line 63) | public function queryCacheHit(string $regionName, QueryCacheKey $key):...
    method queryCacheMiss (line 69) | public function queryCacheMiss(string $regionName, QueryCacheKey $key)...
    method queryCachePut (line 75) | public function queryCachePut(string $regionName, QueryCacheKey $key):...
    method getRegionHitCount (line 86) | public function getRegionHitCount(string $regionName): int
    method getRegionMissCount (line 96) | public function getRegionMissCount(string $regionName): int
    method getRegionPutCount (line 106) | public function getRegionPutCount(string $regionName): int
    method getRegionsMiss (line 112) | public function getRegionsMiss(): array
    method getRegionsHit (line 118) | public function getRegionsHit(): array
    method getRegionsPut (line 124) | public function getRegionsPut(): array
    method clearRegionStats (line 134) | public function clearRegionStats(string $regionName): void
    method clearStats (line 144) | public function clearStats(): void
    method getPutCount (line 154) | public function getPutCount(): int
    method getHitCount (line 162) | public function getHitCount(): int
    method getMissCount (line 170) | public function getMissCount(): int

FILE: src/Cache/Persister/CachedPersister.php
  type CachedPersister (line 12) | interface CachedPersister
    method afterTransactionComplete (line 17) | public function afterTransactionComplete(): void;
    method afterTransactionRolledBack (line 22) | public function afterTransactionRolledBack(): void;
    method getCacheRegion (line 24) | public function getCacheRegion(): Region;

FILE: src/Cache/Persister/Collection/AbstractCollectionPersister.php
  class AbstractCollectionPersister (line 28) | abstract class AbstractCollectionPersister implements CachedCollectionPe...
    method __construct (line 43) | public function __construct(
    method getCacheRegion (line 66) | public function getCacheRegion(): Region
    method getSourceEntityMetadata (line 71) | public function getSourceEntityMetadata(): ClassMetadata
    method getTargetEntityMetadata (line 76) | public function getTargetEntityMetadata(): ClassMetadata
    method loadCollectionCache (line 81) | public function loadCollectionCache(PersistentCollection $collection, ...
    method storeCollectionCache (line 92) | public function storeCollectionCache(CollectionCacheKey $key, Collecti...
    method contains (line 131) | public function contains(PersistentCollection $collection, object $ele...
    method containsKey (line 136) | public function containsKey(PersistentCollection $collection, mixed $k...
    method count (line 141) | public function count(PersistentCollection $collection): int
    method get (line 154) | public function get(PersistentCollection $collection, mixed $index): m...
    method slice (line 162) | public function slice(PersistentCollection $collection, int $offset, i...
    method loadCriteria (line 170) | public function loadCriteria(PersistentCollection $collection, Criteri...

FILE: src/Cache/Persister/Collection/CachedCollectionPersister.php
  type CachedCollectionPersister (line 17) | interface CachedCollectionPersister extends CachedPersister, CollectionP...
    method getSourceEntityMetadata (line 19) | public function getSourceEntityMetadata(): ClassMetadata;
    method getTargetEntityMetadata (line 21) | public function getTargetEntityMetadata(): ClassMetadata;
    method loadCollectionCache (line 28) | public function loadCollectionCache(PersistentCollection $collection, ...
    method storeCollectionCache (line 35) | public function storeCollectionCache(CollectionCacheKey $key, Collecti...

FILE: src/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php
  class NonStrictReadWriteCachedCollectionPersister (line 12) | class NonStrictReadWriteCachedCollectionPersister extends AbstractCollec...
    method afterTransactionComplete (line 14) | public function afterTransactionComplete(): void
    method afterTransactionRolledBack (line 31) | public function afterTransactionRolledBack(): void
    method delete (line 36) | public function delete(PersistentCollection $collection): void
    method update (line 46) | public function update(PersistentCollection $collection): void

FILE: src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php
  class ReadOnlyCachedCollectionPersister (line 11) | class ReadOnlyCachedCollectionPersister extends NonStrictReadWriteCached...
    method update (line 13) | public function update(PersistentCollection $collection): void

FILE: src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php
  class ReadWriteCachedCollectionPersister (line 16) | class ReadWriteCachedCollectionPersister extends AbstractCollectionPersi...
    method __construct (line 18) | public function __construct(
    method afterTransactionComplete (line 27) | public function afterTransactionComplete(): void
    method afterTransactionRolledBack (line 44) | public function afterTransactionRolledBack(): void
    method delete (line 61) | public function delete(PersistentCollection $collection): void
    method update (line 79) | public function update(PersistentCollection $collection): void

FILE: src/Cache/Persister/Entity/AbstractEntityPersister.php
  class AbstractEntityPersister (line 36) | abstract class AbstractEntityPersister implements CachedEntityPersister
    method __construct (line 59) | public function __construct(
    method addInsert (line 80) | public function addInsert(object $entity): void
    method getInserts (line 88) | public function getInserts(): array
    method getSelectSQL (line 93) | public function getSelectSQL(
    method getCountSQL (line 104) | public function getCountSQL(array|Criteria $criteria = []): string
    method getInsertSQL (line 109) | public function getInsertSQL(): string
    method getResultSetMapping (line 114) | public function getResultSetMapping(): ResultSetMapping
    method getSelectConditionStatementSQL (line 119) | public function getSelectConditionStatementSQL(
    method exists (line 128) | public function exists(object $entity, Criteria|null $extraConditions ...
    method getCacheRegion (line 141) | public function getCacheRegion(): Region
    method getEntityHydrator (line 146) | public function getEntityHydrator(): EntityHydrator
    method storeEntityCache (line 151) | public function storeEntityCache(object $entity, EntityCacheKey $key):...
    method storeJoinedAssociations (line 170) | private function storeJoinedAssociations(object $entity): void
    method getHash (line 211) | protected function getHash(
    method expandParameters (line 228) | public function expandParameters(array $criteria): array
    method expandCriteriaParameters (line 236) | public function expandCriteriaParameters(Criteria $criteria): array
    method getClassMetadata (line 241) | public function getClassMetadata(): ClassMetadata
    method getManyToManyCollection (line 249) | public function getManyToManyCollection(
    method getOneToManyCollection (line 261) | public function getOneToManyCollection(
    method getOwningTable (line 270) | public function getOwningTable(string $fieldName): string
    method executeInserts (line 275) | public function executeInserts(): void
    method load (line 291) | public function load(
    method loadAll (line 338) | public function loadAll(
    method loadById (line 374) | public function loadById(array $identifier, object|null $entity = null...
    method count (line 423) | public function count(array|Criteria $criteria = []): int
    method loadCriteria (line 431) | public function loadCriteria(Criteria $criteria): array
    method loadManyToManyCollection (line 466) | public function loadManyToManyCollection(
    method loadOneToManyCollection (line 497) | public function loadOneToManyCollection(
    method loadOneToOneEntity (line 531) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
    method lock (line 539) | public function lock(array $criteria, LockMode|int $lockMode): void
    method refresh (line 547) | public function refresh(array $id, object $entity, LockMode|int|null $...
    method buildCollectionCacheKey (line 553) | protected function buildCollectionCacheKey(AssociationMapping $associa...

FILE: src/Cache/Persister/Entity/CachedEntityPersister.php
  type CachedEntityPersister (line 15) | interface CachedEntityPersister extends CachedPersister, EntityPersister
    method getEntityHydrator (line 17) | public function getEntityHydrator(): EntityHydrator;
    method storeEntityCache (line 19) | public function storeEntityCache(object $entity, EntityCacheKey $key):...

FILE: src/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php
  class NonStrictReadWriteCachedEntityPersister (line 12) | class NonStrictReadWriteCachedEntityPersister extends AbstractEntityPers...
    method afterTransactionComplete (line 14) | public function afterTransactionComplete(): void
    method afterTransactionRolledBack (line 45) | public function afterTransactionRolledBack(): void
    method delete (line 50) | public function delete(object $entity): bool
    method update (line 64) | public function update(object $entity): void
    method updateCache (line 71) | private function updateCache(object $entity, bool $isChanged): bool

FILE: src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php
  class ReadOnlyCachedEntityPersister (line 13) | class ReadOnlyCachedEntityPersister extends NonStrictReadWriteCachedEnti...
    method update (line 15) | public function update(object $entity): void

FILE: src/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php
  class ReadWriteCachedEntityPersister (line 16) | class ReadWriteCachedEntityPersister extends AbstractEntityPersister
    method __construct (line 18) | public function __construct(EntityPersister $persister, ConcurrentRegi...
    method afterTransactionComplete (line 23) | public function afterTransactionComplete(): void
    method afterTransactionRolledBack (line 50) | public function afterTransactionRolledBack(): void
    method delete (line 67) | public function delete(object $entity): bool
    method update (line 89) | public function update(object $entity): void

FILE: src/Cache/QueryCache.php
  type QueryCache (line 13) | interface QueryCache
    method clear (line 15) | public function clear(): bool;
    method put (line 18) | public function put(QueryCacheKey $key, ResultSetMapping $rsm, mixed $...
    method get (line 25) | public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $...
    method getRegion (line 27) | public function getRegion(): Region;

FILE: src/Cache/QueryCacheEntry.php
  class QueryCacheEntry (line 9) | class QueryCacheEntry implements CacheEntry
    method __construct (line 17) | public function __construct(
    method __set_state (line 25) | public static function __set_state(array $values): self

FILE: src/Cache/QueryCacheKey.php
  class QueryCacheKey (line 12) | class QueryCacheKey extends CacheKey
    method __construct (line 15) | public function __construct(

FILE: src/Cache/QueryCacheValidator.php
  type QueryCacheValidator (line 10) | interface QueryCacheValidator
    method isValid (line 15) | public function isValid(QueryCacheKey $key, QueryCacheEntry $entry): b...

FILE: src/Cache/Region.php
  type Region (line 12) | interface Region
    method getName (line 17) | public function getName(): string;
    method contains (line 24) | public function contains(CacheKey $key): bool;
    method get (line 35) | public function get(CacheKey $key): CacheEntry|null;
    method getMultiple (line 45) | public function getMultiple(CollectionCacheEntry $collection): array|n...
    method put (line 56) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
    method evict (line 65) | public function evict(CacheKey $key): bool;
    method evictAll (line 72) | public function evictAll(): bool;

FILE: src/Cache/Region/DefaultRegion.php
  class DefaultRegion (line 23) | class DefaultRegion implements Region
    method __construct (line 28) | public function __construct(
    method getName (line 35) | public function getName(): string
    method contains (line 40) | public function contains(CacheKey $key): bool
    method get (line 45) | public function get(CacheKey $key): CacheEntry|null
    method getMultiple (line 57) | public function getMultiple(CollectionCacheEntry $collection): array|null
    method put (line 86) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
    method evict (line 99) | public function evict(CacheKey $key): bool
    method evictAll (line 104) | public function evictAll(): bool
    method getCacheEntryKey (line 109) | private function getCacheEntryKey(CacheKey $key): string

FILE: src/Cache/Region/FileLockRegion.php
  class FileLockRegion (line 36) | class FileLockRegion implements ConcurrentRegion
    method __construct (line 45) | public function __construct(
    method isLocked (line 59) | private function isLocked(CacheKey $key, Lock|null $lock = null): bool
    method getLockFileName (line 90) | private function getLockFileName(CacheKey $key): string
    method getLockContent (line 95) | private function getLockContent(string $filename): string|false
    method getLockTime (line 100) | private function getLockTime(string $filename): int|false
    method getName (line 105) | public function getName(): string
    method contains (line 110) | public function contains(CacheKey $key): bool
    method get (line 119) | public function get(CacheKey $key): CacheEntry|null
    method getMultiple (line 128) | public function getMultiple(CollectionCacheEntry $collection): array|null
    method put (line 137) | public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock ...
    method evict (line 146) | public function evict(CacheKey $key): bool
    method evictAll (line 155) | public function evictAll(): bool
    method lock (line 168) | public function lock(CacheKey $key): Lock|null
    method unlock (line 186) | public function unlock(CacheKey $key, Lock $lock): bool

FILE: src/Cache/Region/UpdateTimestampCache.php
  class UpdateTimestampCache (line 14) | class UpdateTimestampCache extends DefaultRegion implements TimestampRegion
    method update (line 16) | public function update(CacheKey $key): void

FILE: src/Cache/RegionsConfiguration.php
  class RegionsConfiguration (line 10) | class RegionsConfiguration
    method __construct (line 18) | public function __construct(
    method getDefaultLifetime (line 24) | public function getDefaultLifetime(): int
    method setDefaultLifetime (line 29) | public function setDefaultLifetime(int $defaultLifetime): void
    method getDefaultLockLifetime (line 34) | public function getDefaultLockLifetime(): int
    method setDefaultLockLifetime (line 39) | public function setDefaultLockLifetime(int $defaultLockLifetime): void
    method getLifetime (line 44) | public function getLifetime(string $regionName): int
    method setLifetime (line 49) | public function setLifetime(string $name, int $lifetime): void
    method getLockLifetime (line 54) | public function getLockLifetime(string $regionName): int
    method setLockLifetime (line 59) | public function setLockLifetime(string $name, int $lifetime): void

FILE: src/Cache/TimestampCacheEntry.php
  class TimestampCacheEntry (line 9) | class TimestampCacheEntry implements CacheEntry
    method __construct (line 13) | public function __construct(float|null $time = null)
    method __set_state (line 25) | public static function __set_state(array $values): TimestampCacheEntry

FILE: src/Cache/TimestampCacheKey.php
  class TimestampCacheKey (line 10) | class TimestampCacheKey extends CacheKey
    method __construct (line 13) | public function __construct(string $space)

FILE: src/Cache/TimestampQueryCacheValidator.php
  class TimestampQueryCacheValidator (line 9) | class TimestampQueryCacheValidator implements QueryCacheValidator
    method __construct (line 11) | public function __construct(private readonly TimestampRegion $timestam...
    method isValid (line 15) | public function isValid(QueryCacheKey $key, QueryCacheEntry $entry): bool
    method regionUpdated (line 28) | private function regionUpdated(QueryCacheKey $key, QueryCacheEntry $en...

FILE: src/Cache/TimestampRegion.php
  type TimestampRegion (line 10) | interface TimestampRegion extends Region
    method update (line 17) | public function update(CacheKey $key): void;

FILE: src/Configuration.php
  class Configuration (line 42) | class Configuration extends \Doctrine\DBAL\Configuration
    method setIdentityGenerationPreferences (line 51) | public function setIdentityGenerationPreferences(array $value): void
    method getIdentityGenerationPreferences (line 57) | public function getIdentityGenerationPreferences(): array
    method setProxyDir (line 65) | public function setProxyDir(string $dir): void
    method getProxyDir (line 82) | public function getProxyDir(): string|null
    method getAutoGenerateProxyClasses (line 101) | public function getAutoGenerateProxyClasses(): int
    method setAutoGenerateProxyClasses (line 120) | public function setAutoGenerateProxyClasses(bool|int $autoGenerate): void
    method getProxyNamespace (line 137) | public function getProxyNamespace(): string|null
    method setProxyNamespace (line 154) | public function setProxyNamespace(string $ns): void
    method setMetadataDriverImpl (line 174) | public function setMetadataDriverImpl(MappingDriver $driverImpl): void
    method setEntityNamespaces (line 184) | public function setEntityNamespaces(array $entityNamespaces): void
    method getEntityNamespaces (line 194) | public function getEntityNamespaces(): array
    method getMetadataDriverImpl (line 202) | public function getMetadataDriverImpl(): MappingDriver|null
    method getQueryCache (line 210) | public function getQueryCache(): CacheItemPoolInterface|null
    method setQueryCache (line 218) | public function setQueryCache(CacheItemPoolInterface $cache): void
    method getHydrationCache (line 223) | public function getHydrationCache(): CacheItemPoolInterface|null
    method setHydrationCache (line 228) | public function setHydrationCache(CacheItemPoolInterface $cache): void
    method getMetadataCache (line 233) | public function getMetadataCache(): CacheItemPoolInterface|null
    method setMetadataCache (line 238) | public function setMetadataCache(CacheItemPoolInterface $cache): void
    method addCustomStringFunction (line 253) | public function addCustomStringFunction(string $name, string|callable ...
    method getCustomStringFunction (line 263) | public function getCustomStringFunction(string $name): string|callable...
    method setCustomStringFunctions (line 281) | public function setCustomStringFunctions(array $functions): void
    method addCustomNumericFunction (line 298) | public function addCustomNumericFunction(string $name, string|callable...
    method getCustomNumericFunction (line 308) | public function getCustomNumericFunction(string $name): string|callabl...
    method setCustomNumericFunctions (line 326) | public function setCustomNumericFunctions(array $functions): void
    method addCustomDatetimeFunction (line 343) | public function addCustomDatetimeFunction(string $name, string|callabl...
    method getCustomDatetimeFunction (line 353) | public function getCustomDatetimeFunction(string $name): string|callab...
    method setCustomDatetimeFunctions (line 371) | public function setCustomDatetimeFunctions(array $functions): void
    method setTypedFieldMapper (line 381) | public function setTypedFieldMapper(TypedFieldMapper|null $typedFieldM...
    method getTypedFieldMapper (line 389) | public function getTypedFieldMapper(): TypedFieldMapper|null
    method setCustomHydrationModes (line 399) | public function setCustomHydrationModes(array $modes): void
    method getCustomHydrationMode (line 413) | public function getCustomHydrationMode(string $modeName): string|null
    method addCustomHydrationMode (line 423) | public function addCustomHydrationMode(string $modeName, string $hydra...
    method setClassMetadataFactoryName (line 433) | public function setClassMetadataFactoryName(string $cmfName): void
    method getClassMetadataFactoryName (line 439) | public function getClassMetadataFactoryName(): string
    method addFilter (line 453) | public function addFilter(string $name, string $className): void
    method getFilterClassName (line 464) | public function getFilterClassName(string $name): string|null
    method setDefaultRepositoryClassName (line 476) | public function setDefaultRepositoryClassName(string $className): void
    method getDefaultRepositoryClassName (line 490) | public function getDefaultRepositoryClassName(): string
    method setNamingStrategy (line 498) | public function setNamingStrategy(NamingStrategy $namingStrategy): void
    method getNamingStrategy (line 506) | public function getNamingStrategy(): NamingStrategy
    method setQuoteStrategy (line 518) | public function setQuoteStrategy(QuoteStrategy $quoteStrategy): void
    method getQuoteStrategy (line 526) | public function getQuoteStrategy(): QuoteStrategy
    method setEntityListenerResolver (line 538) | public function setEntityListenerResolver(EntityListenerResolver $reso...
    method getEntityListenerResolver (line 546) | public function getEntityListenerResolver(): EntityListenerResolver
    method setRepositoryFactory (line 558) | public function setRepositoryFactory(RepositoryFactory $repositoryFact...
    method getRepositoryFactory (line 566) | public function getRepositoryFactory(): RepositoryFactory
    method isSecondLevelCacheEnabled (line 571) | public function isSecondLevelCacheEnabled(): bool
    method setSecondLevelCacheEnabled (line 576) | public function setSecondLevelCacheEnabled(bool $flag = true): void
    method setSecondLevelCacheConfiguration (line 581) | public function setSecondLevelCacheConfiguration(CacheConfiguration $c...
    method getSecondLevelCacheConfiguration (line 586) | public function getSecondLevelCacheConfiguration(): CacheConfiguration...
    method getDefaultQueryHints (line 600) | public function getDefaultQueryHints(): array
    method setDefaultQueryHints (line 610) | public function setDefaultQueryHints(array $defaultQueryHints): void
    method getDefaultQueryHint (line 620) | public function getDefaultQueryHint(string $name): mixed
    method setDefaultQueryHint (line 628) | public function setDefaultQueryHint(string $name, mixed $value): void
    method getSchemaIgnoreClasses (line 638) | public function getSchemaIgnoreClasses(): array
    method setSchemaIgnoreClasses (line 648) | public function setSchemaIgnoreClasses(array $schemaIgnoreClasses): void
    method isNativeLazyObjectsEnabled (line 653) | public function isNativeLazyObjectsEnabled(): bool
    method enableNativeLazyObjects (line 658) | public function enableNativeLazyObjects(bool $nativeLazyObjects): void
    method isLazyGhostObjectEnabled (line 680) | public function isLazyGhostObjectEnabled(): bool
    method setLazyGhostObjectEnabled (line 686) | public function setLazyGhostObjectEnabled(bool $flag): void
    method setRejectIdCollisionInIdentityMap (line 697) | public function setRejectIdCollisionInIdentityMap(bool $flag): void
    method isRejectIdCollisionInIdentityMapEnabled (line 712) | public function isRejectIdCollisionInIdentityMapEnabled(): bool
    method setEagerFetchBatchSize (line 717) | public function setEagerFetchBatchSize(int $batchSize = 100): void
    method getEagerFetchBatchSize (line 722) | public function getEagerFetchBatchSize(): int

FILE: src/Decorator/EntityManagerDecorator.php
  class EntityManagerDecorator (line 33) | abstract class EntityManagerDecorator extends ObjectManagerDecorator imp...
    method __construct (line 35) | public function __construct(EntityManagerInterface $wrapped)
    method getRepository (line 40) | public function getRepository(string $className): EntityRepository
    method getMetadataFactory (line 45) | public function getMetadataFactory(): ClassMetadataFactory
    method getClassMetadata (line 50) | public function getClassMetadata(string $className): ClassMetadata
    method getConnection (line 55) | public function getConnection(): Connection
    method getExpressionBuilder (line 60) | public function getExpressionBuilder(): Expr
    method beginTransaction (line 65) | public function beginTransaction(): void
    method wrapInTransaction (line 70) | public function wrapInTransaction(callable $func): mixed
    method commit (line 75) | public function commit(): void
    method rollback (line 80) | public function rollback(): void
    method createQuery (line 85) | public function createQuery(string $dql = ''): Query
    method createNativeQuery (line 90) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
    method createQueryBuilder (line 95) | public function createQueryBuilder(): QueryBuilder
    method getReference (line 100) | public function getReference(string $entityName, mixed $id): object|null
    method close (line 105) | public function close(): void
    method lock (line 110) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
    method find (line 115) | public function find(string $className, mixed $id, LockMode|int|null $...
    method refresh (line 120) | public function refresh(object $object, LockMode|int|null $lockMode = ...
    method getEventManager (line 125) | public function getEventManager(): EventManager
    method getConfiguration (line 130) | public function getConfiguration(): Configuration
    method isOpen (line 135) | public function isOpen(): bool
    method getUnitOfWork (line 140) | public function getUnitOfWork(): UnitOfWork
    method newHydrator (line 145) | public function newHydrator(string|int $hydrationMode): AbstractHydrator
    method getProxyFactory (line 150) | public function getProxyFactory(): ProxyFactory
    method getFilters (line 155) | public function getFilters(): FilterCollection
    method isFiltersStateClean (line 160) | public function isFiltersStateClean(): bool
    method hasFilters (line 165) | public function hasFilters(): bool
    method getCache (line 170) | public function getCache(): Cache|null

FILE: src/EntityManager.php
  class EntityManager (line 60) | class EntityManager implements EntityManagerInterface
    method __construct (line 113) | public function __construct(
    method getConnection (line 155) | public function getConnection(): Connection
    method getMetadataFactory (line 160) | public function getMetadataFactory(): ClassMetadataFactory
    method getExpressionBuilder (line 165) | public function getExpressionBuilder(): Expr
    method beginTransaction (line 170) | public function beginTransaction(): void
    method getCache (line 175) | public function getCache(): Cache|null
    method wrapInTransaction (line 180) | public function wrapInTransaction(callable $func): mixed
    method commit (line 205) | public function commit(): void
    method rollback (line 210) | public function rollback(): void
    method getClassMetadata (line 222) | public function getClassMetadata(string $className): Mapping\ClassMeta...
    method createQuery (line 227) | public function createQuery(string $dql = ''): Query
    method createNativeQuery (line 238) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
    method createQueryBuilder (line 248) | public function createQueryBuilder(): QueryBuilder
    method flush (line 265) | public function flush(): void
    method find (line 274) | public function find($className, mixed $id, LockMode|int|null $lockMod...
    method getReference (line 370) | public function getReference(string $entityName, mixed $id): object|null
    method clear (line 415) | public function clear(): void
    method close (line 420) | public function close(): void
    method persist (line 439) | public function persist(object $object): void
    method remove (line 455) | public function remove(object $object): void
    method refresh (line 462) | public function refresh(object $object, LockMode|int|null $lockMode = ...
    method detach (line 478) | public function detach(object $object): void
    method lock (line 483) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
    method getRepository (line 497) | public function getRepository(string $className): EntityRepository
    method contains (line 507) | public function contains(object $object): bool
    method getEventManager (line 514) | public function getEventManager(): EventManager
    method getConfiguration (line 519) | public function getConfiguration(): Configuration
    method errorIfClosed (line 529) | private function errorIfClosed(): void
    method isOpen (line 536) | public function isOpen(): bool
    method getUnitOfWork (line 541) | public function getUnitOfWork(): UnitOfWork
    method newHydrator (line 546) | public function newHydrator(string|int $hydrationMode): AbstractHydrator
    method getProxyFactory (line 559) | public function getProxyFactory(): ProxyFactory
    method initializeObject (line 564) | public function initializeObject(object $obj): void
    method isUninitializedObject (line 572) | public function isUninitializedObject($value): bool
    method getFilters (line 577) | public function getFilters(): FilterCollection
    method isFiltersStateClean (line 582) | public function isFiltersStateClean(): bool
    method hasFilters (line 587) | public function hasFilters(): bool
    method checkLockRequirements (line 598) | private function checkLockRequirements(LockMode|int $lockMode, ClassMe...
    method configureMetadataCache (line 615) | private function configureMetadataCache(): void
    method createCustomHydrator (line 625) | private function createCustomHydrator(string $hydrationMode): Abstract...

FILE: src/EntityManagerInterface.php
  type EntityManagerInterface (line 20) | interface EntityManagerInterface extends ObjectManager
    method getRepository (line 31) | public function getRepository(string $className): EntityRepository;
    method getCache (line 36) | public function getCache(): Cache|null;
    method getConnection (line 41) | public function getConnection(): Connection;
    method getMetadataFactory (line 43) | public function getMetadataFactory(): ClassMetadataFactory;
    method getExpressionBuilder (line 57) | public function getExpressionBuilder(): Expr;
    method beginTransaction (line 62) | public function beginTransaction(): void;
    method wrapInTransaction (line 81) | public function wrapInTransaction(callable $func): mixed;
    method commit (line 86) | public function commit(): void;
    method rollback (line 91) | public function rollback(): void;
    method createQuery (line 98) | public function createQuery(string $dql = ''): Query;
    method createNativeQuery (line 103) | public function createNativeQuery(string $sql, ResultSetMapping $rsm):...
    method createQueryBuilder (line 108) | public function createQueryBuilder(): QueryBuilder;
    method find (line 133) | public function find(string $className, mixed $id, LockMode|int|null $...
    method refresh (line 148) | public function refresh(object $object, LockMode|int|null $lockMode = ...
    method getReference (line 163) | public function getReference(string $entityName, mixed $id): object|null;
    method close (line 170) | public function close(): void;
    method lock (line 180) | public function lock(object $entity, LockMode|int $lockMode, DateTimeI...
    method getEventManager (line 185) | public function getEventManager(): EventManager;
    method getConfiguration (line 190) | public function getConfiguration(): Configuration;
    method isOpen (line 195) | public function isOpen(): bool;
    method getUnitOfWork (line 200) | public function getUnitOfWork(): UnitOfWork;
    method newHydrator (line 209) | public function newHydrator(string|int $hydrationMode): AbstractHydrator;
    method getProxyFactory (line 214) | public function getProxyFactory(): ProxyFactory;
    method getFilters (line 219) | public function getFilters(): FilterCollection;
    method isFiltersStateClean (line 224) | public function isFiltersStateClean(): bool;
    method hasFilters (line 229) | public function hasFilters(): bool;
    method getClassMetadata (line 240) | public function getClassMetadata(string $className): Mapping\ClassMeta...

FILE: src/EntityNotFoundException.php
  class EntityNotFoundException (line 16) | class EntityNotFoundException extends RuntimeException implements ORMExc...
    method fromClassNameAndIdentifier (line 23) | public static function fromClassNameAndIdentifier(string $className, a...
    method noIdentifierFound (line 39) | public static function noIdentifierFound(string $className): self

FILE: src/EntityRepository.php
  class EntityRepository (line 36) | class EntityRepository implements ObjectRepository, Selectable
    method __construct (line 43) | public function __construct(
    method createQueryBuilder (line 53) | public function createQueryBuilder(string $alias, string|null $indexBy...
    method createResultSetMappingBuilder (line 65) | public function createResultSetMappingBuilder(string $alias): ResultSe...
    method find (line 84) | public function find(mixed $id, LockMode|int|null $lockMode = null, in...
    method findAll (line 94) | public function findAll(): array
    method findBy (line 106) | public function findBy(array $criteria, array|null $orderBy = null, in...
    method findOneBy (line 121) | public function findOneBy(array $criteria, array|null $orderBy = null)...
    method count (line 138) | public function count(array $criteria = []): int
    method __call (line 151) | public function __call(string $method, array $arguments): mixed
    method getEntityName (line 173) | protected function getEntityName(): string
    method getClassName (line 178) | public function getClassName(): string
    method getEntityManager (line 183) | protected function getEntityManager(): EntityManagerInterface
    method getClassMetadata (line 189) | protected function getClassMetadata(): ClassMetadata
    method matching (line 200) | public function matching(Criteria $criteria): AbstractLazyCollection&S...
    method resolveMagicCall (line 217) | private function resolveMagicCall(string $method, string $by, array $a...

FILE: src/Event/ListenersInvoker.php
  class ListenersInvoker (line 16) | class ListenersInvoker
    method __construct (line 29) | public function __construct(EntityManagerInterface $em)
    method getSubscribedSystems (line 43) | public function getSubscribedSystems(ClassMetadata $metadata, string $...
    method invoke (line 71) | public function invoke(

FILE: src/Event/LoadClassMetadataEventArgs.php
  class LoadClassMetadataEventArgs (line 16) | class LoadClassMetadataEventArgs extends BaseLoadClassMetadataEventArgs
    method getEntityManager (line 21) | public function getEntityManager(): EntityManagerInterface

FILE: src/Event/OnClassMetadataNotFoundEventArgs.php
  class OnClassMetadataNotFoundEventArgs (line 20) | class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs
    method __construct (line 25) | public function __construct(
    method setFoundMetadata (line 32) | public function setFoundMetadata(ClassMetadata|null $classMetadata): void
    method getFoundMetadata (line 37) | public function getFoundMetadata(): ClassMetadata|null
    method getClassName (line 45) | public function getClassName(): string

FILE: src/Event/OnClearEventArgs.php
  class OnClearEventArgs (line 17) | class OnClearEventArgs extends BaseOnClearEventArgs

FILE: src/Event/OnFlushEventArgs.php
  class OnFlushEventArgs (line 17) | class OnFlushEventArgs extends ManagerEventArgs

FILE: src/Event/PostFlushEventArgs.php
  class PostFlushEventArgs (line 17) | class PostFlushEventArgs extends ManagerEventArgs

FILE: src/Event/PostLoadEventArgs.php
  class PostLoadEventArgs (line 11) | final class PostLoadEventArgs extends LifecycleEventArgs

FILE: src/Event/PostPersistEventArgs.php
  class PostPersistEventArgs (line 11) | final class PostPersistEventArgs extends LifecycleEventArgs

FILE: src/Event/PostRemoveEventArgs.php
  class PostRemoveEventArgs (line 11) | final class PostRemoveEventArgs extends LifecycleEventArgs

FILE: src/Event/PostUpdateEventArgs.php
  class PostUpdateEventArgs (line 11) | final class PostUpdateEventArgs extends LifecycleEventArgs

FILE: src/Event/PreFlushEventArgs.php
  class PreFlushEventArgs (line 17) | class PreFlushEventArgs extends ManagerEventArgs

FILE: src/Event/PrePersistEventArgs.php
  class PrePersistEventArgs (line 11) | final class PrePersistEventArgs extends LifecycleEventArgs

FILE: src/Event/PreRemoveEventArgs.php
  class PreRemoveEventArgs (line 11) | final class PreRemoveEventArgs extends LifecycleEventArgs

FILE: src/Event/PreUpdateEventArgs.php
  class PreUpdateEventArgs (line 20) | class PreUpdateEventArgs extends LifecycleEventArgs
    method __construct (line 29) | public function __construct(object $entity, EntityManagerInterface $em...
    method getEntityChangeSet (line 42) | public function getEntityChangeSet(): array
    method hasChangedField (line 50) | public function hasChangedField(string $field): bool
    method getOldValue (line 58) | public function getOldValue(string $field): mixed
    method getNewValue (line 68) | public function getNewValue(string $field): mixed
    method setNewValue (line 78) | public function setNewValue(string $field, mixed $value): void
    method assertValidField (line 90) | private function assertValidField(string $field): void

FILE: src/Events.php
  class Events (line 12) | final class Events
    method __construct (line 17) | private function __construct()

FILE: src/Exception/ConfigurationException.php
  type ConfigurationException (line 7) | interface ConfigurationException extends ORMException

FILE: src/Exception/DuplicateFieldException.php
  class DuplicateFieldException (line 11) | class DuplicateFieldException extends LogicException implements ORMExcep...
    method create (line 13) | public static function create(string $argName, string $columnName): self

FILE: src/Exception/EntityIdentityCollisionException.php
  class EntityIdentityCollisionException (line 11) | final class EntityIdentityCollisionException extends Exception implement...
    method create (line 13) | public static function create(object $existingEntity, object $newEntit...

FILE: src/Exception/EntityManagerClosed.php
  class EntityManagerClosed (line 9) | final class EntityManagerClosed extends RuntimeException implements Mana...
    method create (line 11) | public static function create(): self

FILE: src/Exception/EntityMissingAssignedId.php
  class EntityMissingAssignedId (line 11) | final class EntityMissingAssignedId extends LogicException implements OR...
    method forField (line 13) | public static function forField(object $entity, string $field): self

FILE: src/Exception/InvalidEntityRepository.php
  class InvalidEntityRepository (line 10) | final class InvalidEntityRepository extends LogicException implements Co...
    method fromClassName (line 12) | public static function fromClassName(string $className): self

FILE: src/Exception/InvalidHydrationMode.php
  class InvalidHydrationMode (line 11) | final class InvalidHydrationMode extends LogicException implements Manag...
    method fromMode (line 13) | public static function fromMode(string $mode): self

FILE: src/Exception/ManagerException.php
  type ManagerException (line 9) | interface ManagerException extends Throwable

FILE: src/Exception/MissingIdentifierField.php
  class MissingIdentifierField (line 11) | final class MissingIdentifierField extends LogicException implements Man...
    method fromFieldAndClass (line 13) | public static function fromFieldAndClass(string $fieldName, string $cl...

FILE: src/Exception/MissingMappingDriverImplementation.php
  class MissingMappingDriverImplementation (line 9) | final class MissingMappingDriverImplementation extends LogicException im...
    method create (line 11) | public static function create(): self

FILE: src/Exception/MultipleSelectorsFoundException.php
  class MultipleSelectorsFoundException (line 12) | final class MultipleSelectorsFoundException extends LogicException imple...
    method create (line 17) | public static function create(array $selectors): self

FILE: src/Exception/NoMatchingPropertyException.php
  class NoMatchingPropertyException (line 11) | class NoMatchingPropertyException extends LogicException implements ORME...
    method create (line 13) | public static function create(string $property): self

FILE: src/Exception/NotSupported.php
  class NotSupported (line 12) | final class NotSupported extends LogicException implements ORMException
    method create (line 14) | public static function create(): self
    method createForDbal3 (line 19) | public static function createForDbal3(string $context): self
    method createForPersistence3 (line 32) | public static function createForPersistence3(string $context): self

FILE: src/Exception/ORMException.php
  type ORMException (line 9) | interface ORMException extends Throwable

FILE: src/Exception/PersisterException.php
  class PersisterException (line 9) | class PersisterException extends BasePersisterException

FILE: src/Exception/RepositoryException.php
  type RepositoryException (line 11) | interface RepositoryException extends ORMException

FILE: src/Exception/SchemaToolException.php
  type SchemaToolException (line 9) | interface SchemaToolException extends Throwable

FILE: src/Exception/UnexpectedAssociationValue.php
  class UnexpectedAssociationValue (line 11) | final class UnexpectedAssociationValue extends CacheException
    method create (line 13) | public static function create(

FILE: src/Exception/UnrecognizedIdentifierFields.php
  class UnrecognizedIdentifierFields (line 12) | final class UnrecognizedIdentifierFields extends LogicException implemen...
    method fromClassAndFieldNames (line 15) | public static function fromClassAndFieldNames(string $className, array...

FILE: src/Id/AbstractIdGenerator.php
  class AbstractIdGenerator (line 9) | abstract class AbstractIdGenerator
    method generateId (line 14) | abstract public function generateId(EntityManagerInterface $em, object...
    method isPostInsertGenerator (line 24) | public function isPostInsertGenerator(): bool

FILE: src/Id/AssignedGenerator.php
  class AssignedGenerator (line 13) | class AssignedGenerator extends AbstractIdGenerator
    method generateId (line 22) | public function generateId(EntityManagerInterface $em, object|null $en...

FILE: src/Id/BigIntegerIdentityGenerator.php
  class BigIntegerIdentityGenerator (line 14) | class BigIntegerIdentityGenerator extends AbstractIdGenerator
    method generateId (line 16) | public function generateId(EntityManagerInterface $em, object|null $en...
    method isPostInsertGenerator (line 21) | public function isPostInsertGenerator(): bool

FILE: src/Id/IdentityGenerator.php
  class IdentityGenerator (line 14) | class IdentityGenerator extends AbstractIdGenerator
    method generateId (line 16) | public function generateId(EntityManagerInterface $em, object|null $en...
    method isPostInsertGenerator (line 21) | public function isPostInsertGenerator(): bool

FILE: src/Id/SequenceGenerator.php
  class SequenceGenerator (line 18) | class SequenceGenerator extends AbstractIdGenerator implements Serializable
    method __construct (line 29) | public function __construct(
    method generateId (line 35) | public function generateId(EntityManagerInterface $em, object|null $en...
    method getCurrentMaxValue (line 56) | public function getCurrentMaxValue(): int|null
    method getNextValue (line 64) | public function getNextValue(): int
    method serialize (line 70) | final public function serialize(): string
    method __serialize (line 84) | public function __serialize(): array
    method unserialize (line 93) | final public function unserialize(string $serialized): void
    method __unserialize (line 107) | public function __unserialize(array $data): void

FILE: src/Internal/Hydration/AbstractHydrator.php
  class AbstractHydrator (line 40) | abstract class AbstractHydrator
    method __construct (line 86) | public function __construct(protected EntityManagerInterface $em)
    method toIterable (line 101) | final public function toIterable(Result $stmt, ResultSetMapping $resul...
    method statement (line 143) | final protected function statement(): Result
    method resultSetMapping (line 152) | final protected function resultSetMapping(): ResultSetMapping
    method hydrateAll (line 166) | public function hydrateAll(Result $stmt, ResultSetMapping $resultSetMa...
    method onClear (line 188) | public function onClear(mixed $eventArgs): void
    method prepare (line 196) | protected function prepare(): void
    method cleanup (line 204) | protected function cleanup(): void
    method cleanupAfterRowIteration (line 219) | protected function cleanupAfterRowIteration(): void
    method hydrateRowData (line 233) | protected function hydrateRowData(array $row, array &$result): void
    method hydrateAllData (line 241) | abstract protected function hydrateAllData(): mixed;
    method gatherRowData (line 270) | protected function gatherRowData(array $data, array &$id, array &$none...
    method hydrateNestedEntity (line 391) | protected function hydrateNestedEntity(array $data, string $dqlAlias):...
    method gatherScalarRowData (line 410) | protected function gatherScalarRowData(array &$data): array
    method hydrateColumnInfo (line 445) | protected function hydrateColumnInfo(string $key): array|null
    method getDiscriminatorValues (line 541) | private function getDiscriminatorValues(ClassMetadata $classMetadata):...
    method getClassMetadata (line 556) | protected function getClassMetadata(string $className): ClassMetadata
    method registerManaged (line 572) | protected function registerManaged(ClassMetadata $class, object $entit...
    method buildEnum (line 599) | final protected function buildEnum(mixed $value, string $enumType): Ba...

FILE: src/Internal/Hydration/ArrayHydrator.php
  class ArrayHydrator (line 17) | class ArrayHydrator extends AbstractHydrator
    method prepare (line 35) | protected function prepare(): void
    method hydrateAllData (line 49) | protected function hydrateAllData(): array
    method hydrateRowData (line 63) | protected function hydrateRowData(array $row, array &$result): void
    method updateResultPointer (line 239) | private function updateResultPointer(

FILE: src/Internal/Hydration/HydrationException.php
  class HydrationException (line 13) | class HydrationException extends Exception implements ORMException
    method nonUniqueResult (line 15) | public static function nonUniqueResult(): self
    method parentObjectOfRelationNotFound (line 20) | public static function parentObjectOfRelationNotFound(string $alias, s...
    method emptyDiscriminatorValue (line 30) | public static function emptyDiscriminatorValue(string $dqlAlias): self
    method missingDiscriminatorColumn (line 38) | public static function missingDiscriminatorColumn(string $entityName, ...
    method missingDiscriminatorMetaMappingColumn (line 48) | public static function missingDiscriminatorMetaMappingColumn(string $e...
    method invalidDiscriminatorValue (line 59) | public static function invalidDiscriminatorValue(string $discrValue, a...
    method partialObjectHydrationDisallowed (line 68) | public static function partialObjectHydrationDisallowed(): self

FILE: src/Internal/Hydration/ObjectHydrator.php
  class ObjectHydrator (line 29) | class ObjectHydrator extends AbstractHydrator
    method prepare (line 54) | protected function prepare(): void
    method cleanup (line 111) | protected function cleanup(): void
    method cleanupAfterRowIteration (line 130) | protected function cleanupAfterRowIteration(): void
    method hydrateAllData (line 142) | protected function hydrateAllData(): array
    method initRelatedCollection (line 170) | private function initRelatedCollection(
    method getEntity (line 224) | private function getEntity(array $data, string $dqlAlias): object
    method getEntityFromIdentityMap (line 275) | private function getEntityFromIdentityMap(string $className, array $da...
    method hydrateRowData (line 321) | protected function hydrateRowData(array $row, array &$result): void
    method hydrateNestedEntity (line 577) | protected function hydrateNestedEntity(array $data, string $dqlAlias):...
    method onClear (line 590) | public function onClear(mixed $eventArgs): void

FILE: src/Internal/Hydration/ScalarColumnHydrator.php
  class ScalarColumnHydrator (line 15) | final class ScalarColumnHydrator extends AbstractHydrator
    method hydrateAllData (line 23) | protected function hydrateAllData(): array

FILE: src/Internal/Hydration/ScalarHydrator.php
  class ScalarHydrator (line 12) | class ScalarHydrator extends AbstractHydrator
    method hydrateAllData (line 17) | protected function hydrateAllData(): array
    method hydrateRowData (line 31) | protected function hydrateRowData(array $row, array &$result): void

FILE: src/Internal/Hydration/SimpleObjectHydrator.php
  class SimpleObjectHydrator (line 25) | class SimpleObjectHydrator extends AbstractHydrator
    method prepare (line 31) | protected function prepare(): void
    method cleanup (line 44) | protected function cleanup(): void
    method hydrateAllData (line 55) | protected function hydrateAllData(): array
    method hydrateRowData (line 71) | protected function hydrateRowData(array $row, array &$result): void

FILE: src/Internal/Hydration/SingleScalarHydrator.php
  class SingleScalarHydrator (line 17) | class SingleScalarHydrator extends AbstractHydrator
    method hydrateAllData (line 19) | protected function hydrateAllData(): mixed

FILE: src/Internal/HydrationCompleteHandler.php
  class HydrationCompleteHandler (line 17) | final class HydrationCompleteHandler
    method __construct (line 22) | public function __construct(
    method deferPostLoadInvoking (line 31) | public function deferPostLoadInvoking(ClassMetadata $class, object $en...
    method hydrationComplete (line 47) | public function hydrationComplete(): void

FILE: src/Internal/NoUnknownNamedArguments.php
  type NoUnknownNamedArguments (line 26) | trait NoUnknownNamedArguments
    method validateVariadicParameter (line 34) | private static function validateVariadicParameter(array $parameter): void

FILE: src/Internal/SQLResultCasing.php
  type SQLResultCasing (line 16) | trait SQLResultCasing
    method getSQLResultCasing (line 18) | private function getSQLResultCasing(AbstractPlatform $platform, string...

FILE: src/Internal/StronglyConnectedComponents.php
  class StronglyConnectedComponents (line 26) | final class StronglyConnectedComponents
    method addNode (line 85) | public function addNode(object $node): void
    method hasNode (line 93) | public function hasNode(object $node): bool
    method addEdge (line 101) | public function addEdge(object $from, object $to): void
    method findStronglyConnectedComponents (line 109) | public function findStronglyConnectedComponents(): void
    method tarjan (line 118) | private function tarjan(int $oid): void
    method getNodeRepresentingStronglyConnectedComponent (line 149) | public function getNodeRepresentingStronglyConnectedComponent(object $...

FILE: src/Internal/TopologicalSort.php
  class TopologicalSort (line 21) | final class TopologicalSort
    method addNode (line 58) | public function addNode(object $node): void
    method hasNode (line 66) | public function hasNode(object $node): bool
    method addEdge (line 76) | public function addEdge(object $from, object $to, bool $optional): void
    method sort (line 95) | public function sort(): array
    method visit (line 106) | private function visit(int $oid): void

FILE: src/Internal/TopologicalSort/CycleDetectedException.php
  class CycleDetectedException (line 11) | class CycleDetectedException extends RuntimeException
    method __construct (line 21) | public function __construct(private readonly object $startNode)
    method getCycle (line 29) | public function getCycle(): array
    method addToCycle (line 34) | public function addToCycle(object $node): void
    method isCycleCollected (line 43) | public function isCycleCollected(): bool

FILE: src/Internal/UnitOfWork/InsertBatch.php
  class InsertBatch (line 25) | final class InsertBatch
    method __construct (line 31) | public function __construct(
    method batchByEntityType (line 52) | public static function batchByEntityType(

FILE: src/LazyCriteriaCollection.php
  class LazyCriteriaCollection (line 27) | class LazyCriteriaCollection extends AbstractLazyCollection implements S...
    method __construct (line 31) | public function __construct(
    method count (line 40) | public function count(): int
    method isEmpty (line 57) | public function isEmpty(): bool
    method contains (line 73) | public function contains(mixed $element): bool
    method matching (line 83) | public function matching(Criteria $criteria): ReadableCollection&Selec...
    method doInitialize (line 91) | protected function doInitialize(): void

FILE: src/Mapping/AnsiQuoteStrategy.php
  class AnsiQuoteStrategy (line 14) | class AnsiQuoteStrategy implements QuoteStrategy
    method getColumnName (line 18) | public function getColumnName(
    method getTableName (line 26) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
    method getSequenceName (line 34) | public function getSequenceName(array $definition, ClassMetadata $clas...
    method getJoinColumnName (line 39) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
    method getReferencedJoinColumnName (line 44) | public function getReferencedJoinColumnName(
    method getJoinTableName (line 52) | public function getJoinTableName(
    method getIdentifierColumnNames (line 63) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
    method getColumnAlias (line 68) | public function getColumnAlias(

FILE: src/Mapping/ArrayAccessImplementation.php
  type ArrayAccessImplementation (line 13) | trait ArrayAccessImplementation
    method offsetExists (line 16) | public function offsetExists(mixed $offset): bool
    method offsetGet (line 29) | public function offsetGet(mixed $offset): mixed
    method offsetSet (line 46) | public function offsetSet(mixed $offset, mixed $value): void
    method offsetUnset (line 59) | public function offsetUnset(mixed $offset): void

FILE: src/Mapping/AssociationMapping.php
  class AssociationMapping (line 18) | abstract class AssociationMapping implements ArrayAccess
    method __construct (line 91) | final public function __construct(
    method fromMappingArray (line 120) | public static function fromMappingArray(array $mappingArray): static
    method isOwningSide (line 165) | final public function isOwningSide(): bool
    method isToOne (line 171) | final public function isToOne(): bool
    method isToMany (line 177) | final public function isToMany(): bool
    method isOneToOneOwningSide (line 183) | final public function isOneToOneOwningSide(): bool
    method isToOneOwningSide (line 189) | final public function isToOneOwningSide(): bool
    method isManyToManyOwningSide (line 195) | final public function isManyToManyOwningSide(): bool
    method isOneToOne (line 201) | final public function isOneToOne(): bool
    method isOneToMany (line 207) | final public function isOneToMany(): bool
    method isManyToOne (line 213) | final public function isManyToOne(): bool
    method isManyToMany (line 219) | final public function isManyToMany(): bool
    method isOrdered (line 225) | final public function isOrdered(): bool
    method isIndexed (line 231) | public function isIndexed(): bool
    method type (line 236) | final public function type(): int
    method offsetExists (line 248) | public function offsetExists(mixed $offset): bool
    method offsetGet (line 253) | final public function offsetGet(mixed $offset): mixed
    method offsetSet (line 270) | public function offsetSet(mixed $offset, mixed $value): void
    method offsetUnset (line 289) | public function offsetUnset(mixed $offset): void
    method isCascadeRemove (line 302) | final public function isCascadeRemove(): bool
    method isCascadePersist (line 307) | final public function isCascadePersist(): bool
    method isCascadeRefresh (line 312) | final public function isCascadeRefresh(): bool
    method isCascadeDetach (line 317) | final public function isCascadeDetach(): bool
    method toArray (line 323) | public function toArray(): array
    method __sleep (line 334) | public function __sleep(): array

FILE: src/Mapping/AssociationOverride.php
  class AssociationOverride (line 8) | final class AssociationOverride implements MappingAttribute
    method __construct (line 32) | public function __construct(

FILE: src/Mapping/AssociationOverrides.php
  class AssociationOverrides (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 24) | public function __construct(array|AssociationOverride $overrides)

FILE: src/Mapping/AttributeOverride.php
  class AttributeOverride (line 8) | final class AttributeOverride implements MappingAttribute
    method __construct (line 10) | public function __construct(

FILE: src/Mapping/AttributeOverrides.php
  class AttributeOverrides (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 24) | public function __construct(array|AttributeOverride $overrides)

FILE: src/Mapping/Builder/AssociationBuilder.php
  class AssociationBuilder (line 10) | class AssociationBuilder
    method __construct (line 16) | public function __construct(
    method mappedBy (line 24) | public function mappedBy(string $fieldName): static
    method inversedBy (line 32) | public function inversedBy(string $fieldName): static
    method cascadeAll (line 40) | public function cascadeAll(): static
    method cascadePersist (line 48) | public function cascadePersist(): static
    method cascadeRemove (line 56) | public function cascadeRemove(): static
    method cascadeDetach (line 64) | public function cascadeDetach(): static
    method cascadeRefresh (line 72) | public function cascadeRefresh(): static
    method fetchExtraLazy (line 80) | public function fetchExtraLazy(): static
    method fetchEager (line 88) | public function fetchEager(): static
    method fetchLazy (line 96) | public function fetchLazy(): static
    method addJoinColumn (line 108) | public function addJoinColumn(
    method makePrimaryKey (line 137) | public function makePrimaryKey(): static
    method orphanRemoval (line 152) | public function orphanRemoval(): static
    method build (line 160) | public function build(): ClassMetadataBuilder

FILE: src/Mapping/Builder/ClassMetadataBuilder.php
  class ClassMetadataBuilder (line 15) | class ClassMetadataBuilder
    method __construct (line 17) | public function __construct(
    method getClassMetadata (line 22) | public function getClassMetadata(): ClassMetadata
    method setMappedSuperClass (line 32) | public function setMappedSuperClass(): static
    method setEmbeddable (line 45) | public function setEmbeddable(): static
    method addEmbedded (line 60) | public function addEmbedded(string $fieldName, string $class, string|f...
    method setCustomRepositoryClass (line 78) | public function setCustomRepositoryClass(string $repositoryClassName):...
    method setReadOnly (line 90) | public function setReadOnly(): static
    method setTable (line 102) | public function setTable(string $name): static
    method addIndex (line 116) | public function addIndex(array $columns, string $name): static
    method addUniqueConstraint (line 134) | public function addUniqueConstraint(array $columns, string $name): static
    method setJoinedTableInheritance (line 150) | public function setJoinedTableInheritance(): static
    method setSingleTableInheritance (line 162) | public function setSingleTableInheritance(): static
    method setDiscriminatorColumn (line 177) | public function setDiscriminatorColumn(
    method addDiscriminatorMapClass (line 204) | public function addDiscriminatorMapClass(string $name, string $class):...
    method setChangeTrackingPolicyDeferredExplicit (line 216) | public function setChangeTrackingPolicyDeferredExplicit(): static
    method addLifecycleEvent (line 228) | public function addLifecycleEvent(string $methodName, string $event): ...
    method addField (line 242) | public function addField(string $name, string $type, array $mapping = ...
    method createField (line 255) | public function createField(string $name, string $type): FieldBuilder
    method createEmbedded (line 269) | public function createEmbedded(string $fieldName, string $class): Embe...
    method addManyToOne (line 284) | public function addManyToOne(
    method createManyToOne (line 303) | public function createManyToOne(string $name, string $targetEntity): A...
    method createOneToOne (line 318) | public function createOneToOne(string $name, string $targetEntity): As...
    method addInverseOneToOne (line 333) | public function addInverseOneToOne(string $name, string $targetEntity,...
    method addOwningOneToOne (line 344) | public function addOwningOneToOne(
    method createManyToMany (line 361) | public function createManyToMany(string $name, string $targetEntity): ...
    method addOwningManyToMany (line 376) | public function addOwningManyToMany(
    method addInverseManyToMany (line 393) | public function addInverseManyToMany(string $name, string $targetEntit...
    method createOneToMany (line 404) | public function createOneToMany(string $name, string $targetEntity): O...
    method addOneToMany (line 419) | public function addOneToMany(string $name, string $targetEntity, strin...

FILE: src/Mapping/Builder/EmbeddedBuilder.php
  class EmbeddedBuilder (line 12) | class EmbeddedBuilder
    method __construct (line 15) | public function __construct(
    method setColumnPrefix (line 26) | public function setColumnPrefix(string $columnPrefix): static
    method build (line 38) | public function build(): ClassMetadataBuilder

FILE: src/Mapping/Builder/EntityListenerBuilder.php
  class EntityListenerBuilder (line 17) | class EntityListenerBuilder
    method bindEntityListener (line 39) | public static function bindEntityListener(ClassMetadata $metadata, str...

FILE: src/Mapping/Builder/FieldBuilder.php
  class FieldBuilder (line 14) | class FieldBuilder
    method __construct (line 25) | public function __construct(
    method length (line 36) | public function length(int $length): static
    method nullable (line 48) | public function nullable(bool $flag = true): static
    method unique (line 60) | public function unique(bool $flag = true): static
    method index (line 72) | public function index(bool $flag = true): static
    method columnName (line 84) | public function columnName(string $name): static
    method precision (line 96) | public function precision(int $p): static
    method insertable (line 108) | public function insertable(bool $flag = true): self
    method updatable (line 122) | public function updatable(bool $flag = true): self
    method scale (line 136) | public function scale(int $s): static
    method makePrimaryKey (line 148) | public function makePrimaryKey(): static
    method option (line 160) | public function option(string $name, mixed $value): static
    method generatedValue (line 168) | public function generatedValue(string $strategy = 'AUTO'): static
    method isVersionField (line 180) | public function isVersionField(): static
    method setSequenceGenerator (line 192) | public function setSequenceGenerator(string $sequenceName, int $alloca...
    method columnDefinition (line 208) | public function columnDefinition(string $def): static
    method setCustomIdGenerator (line 221) | public function setCustomIdGenerator(string $customIdGenerator): static
    method build (line 233) | public function build(): ClassMetadataBuilder

FILE: src/Mapping/Builder/ManyToManyAssociationBuilder.php
  class ManyToManyAssociationBuilder (line 12) | class ManyToManyAssociationBuilder extends OneToManyAssociationBuilder
    method setJoinTable (line 20) | public function setJoinTable(string $name): static
    method addJoinColumn (line 32) | public function addJoinColumn(
    method addInverseJoinColumn (line 56) | public function addInverseJoinColumn(
    method build (line 75) | public function build(): ClassMetadataBuilder

FILE: src/Mapping/Builder/OneToManyAssociationBuilder.php
  class OneToManyAssociationBuilder (line 12) | class OneToManyAssociationBuilder extends AssociationBuilder
    method setOrderBy (line 19) | public function setOrderBy(array $fieldNames): static
    method setIndexBy (line 27) | public function setIndexBy(string $fieldName): static
    method build (line 34) | public function build(): ClassMetadataBuilder

FILE: src/Mapping/Cache.php
  class Cache (line 10) | #[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_PROPERTY)]
    method __construct (line 14) | public function __construct(

FILE: src/Mapping/ChainTypedFieldMapper.php
  class ChainTypedFieldMapper (line 10) | final class ChainTypedFieldMapper implements TypedFieldMapper
    method __construct (line 17) | public function __construct(TypedFieldMapper ...$typedFieldMappers)
    method validateAndComplete (line 27) | public function validateAndComplete(array $mapping, ReflectionProperty...

FILE: src/Mapping/ChangeTrackingPolicy.php
  class ChangeTrackingPolicy (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/ClassMetadata.php
  class ClassMetadata (line 81) | class ClassMetadata implements PersistenceClassMetadata, Stringable
    method __construct (line 563) | public function __construct(public string $name, NamingStrategy|null $...
    method getReflectionProperties (line 579) | public function getReflectionProperties(): array|LegacyReflectionFields
    method getPropertyAccessors (line 589) | public function getPropertyAccessors(): array
    method getReflectionProperty (line 599) | public function getReflectionProperty(string $name): ReflectionPropert...
    method getPropertyAccessor (line 604) | public function getPropertyAccessor(string $name): PropertyAccessor|null
    method getSingleIdReflectionProperty (line 614) | public function getSingleIdReflectionProperty(): ReflectionProperty|null
    method getSingleIdPropertyAccessor (line 624) | public function getSingleIdPropertyAccessor(): PropertyAccessor|null
    method getIdentifierValues (line 641) | public function getIdentifierValues(object $entity): array
    method setIdentifierValues (line 674) | public function setIdentifierValues(object $entity, array $id): void
    method setFieldValue (line 684) | public function setFieldValue(object $entity, string $field, mixed $va...
    method getFieldValue (line 692) | public function getFieldValue(object $entity, string $field): mixed
    method __toString (line 704) | public function __toString(): string
    method __sleep (line 722) | public function __sleep(): array
    method newInstance (line 816) | public function newInstance(): object
    method wakeupReflection (line 824) | public function wakeupReflection(ReflectionService $reflService): void
    method initializeReflection (line 906) | public function initializeReflection(ReflectionService $reflService): ...
    method validateIdentifier (line 923) | public function validateIdentifier(): void
    method validateAssociations (line 944) | public function validateAssociations(): void
    method validateLifecycleCallbacks (line 962) | public function validateLifecycleCallbacks(ReflectionService $reflServ...
    method enableCache (line 974) | public function enableCache(array $cache): void
    method enableAssociationCache (line 988) | public function enableAssociationCache(string $fieldName, array $cache...
    method getAssociationCacheDefaults (line 999) | public function getAssociationCacheDefaults(string $fieldName, array $...
    method setChangeTrackingPolicy (line 1015) | public function setChangeTrackingPolicy(int $policy): void
    method isChangeTrackingDeferredExplicit (line 1023) | public function isChangeTrackingDeferredExplicit(): bool
    method isChangeTrackingDeferredImplicit (line 1031) | public function isChangeTrackingDeferredImplicit(): bool
    method isIdentifier (line 1039) | public function isIdentifier(string $fieldName): bool
    method isUniqueField (line 1052) | public function isUniqueField(string $fieldName): bool
    method isNullable (line 1059) | public function isNullable(string $fieldName): bool
    method isIndexed (line 1066) | public function isIndexed(string $fieldName): bool
    method getColumnName (line 1078) | public function getColumnName(string $fieldName): string
    method getFieldMapping (line 1090) | public function getFieldMapping(string $fieldName): FieldMapping
    method getAssociationMapping (line 1109) | public function getAssociationMapping(string $fieldName): AssociationM...
    method getAssociationMappings (line 1123) | public function getAssociationMappings(): array
    method getFieldName (line 1134) | public function getFieldName(string $columnName): string
    method isTypedProperty (line 1142) | private function isTypedProperty(string $name): bool
    method validateAndCompleteTypedFieldMapping (line 1156) | private function validateAndCompleteTypedFieldMapping(array $mapping):...
    method validateAndCompleteTypedAssociationMapping (line 1170) | private function validateAndCompleteTypedAssociationMapping(array $map...
    method validateAndCompleteFieldMapping (line 1200) | protected function validateAndCompleteFieldMapping(array $mapping): Fi...
    method _validateAndCompleteAssociationMapping (line 1294) | protected function _validateAndCompleteAssociationMapping(array $mappi...
    method getIdentifierFieldNames (line 1463) | public function getIdentifierFieldNames(): array
    method getSingleIdentifierFieldName (line 1474) | public function getSingleIdentifierFieldName(): string
    method getSingleIdentifierColumnName (line 1493) | public function getSingleIdentifierColumnName(): string
    method setIdentifier (line 1505) | public function setIdentifier(array $identifier): void
    method getIdentifier (line 1514) | public function getIdentifier(): array
    method hasField (line 1519) | public function hasField(string $fieldName): bool
    method getColumnNames (line 1532) | public function getColumnNames(array|null $fieldNames = null): array
    method getIdentifierColumnNames (line 1546) | public function getIdentifierColumnNames(): array
    method setIdGeneratorType (line 1573) | public function setIdGeneratorType(int $generatorType): void
    method usesIdGenerator (line 1581) | public function usesIdGenerator(): bool
    method isInheritanceTypeNone (line 1586) | public function isInheritanceTypeNone(): bool
    method isInheritanceTypeJoined (line 1597) | public function isInheritanceTypeJoined(): bool
    method isInheritanceTypeSingleTable (line 1608) | public function isInheritanceTypeSingleTable(): bool
    method isIdGeneratorIdentity (line 1616) | public function isIdGeneratorIdentity(): bool
    method isIdGeneratorSequence (line 1626) | public function isIdGeneratorSequence(): bool
    method isIdentifierNatural (line 1635) | public function isIdentifierNatural(): bool
    method getTypeOfField (line 1645) | public function getTypeOfField(string $fieldName): string|null
    method getTableName (line 1655) | public function getTableName(): string
    method getSchemaName (line 1663) | public function getSchemaName(): string|null
    method getTemporaryIdTableName (line 1671) | public function getTemporaryIdTableName(): string
    method setSubclasses (line 1682) | public function setSubclasses(array $subclasses): void
    method setParentClasses (line 1697) | public function setParentClasses(array $classNames): void
    method setInheritanceType (line 1713) | public function setInheritanceType(int $type): void
    method setAssociationOverride (line 1729) | public function setAssociationOverride(string $fieldName, array $overr...
    method setAttributeOverride (line 1787) | public function setAttributeOverride(string $fieldName, array $overrid...
    method isInheritedField (line 1832) | public function isInheritedField(string $fieldName): bool
    method isRootEntity (line 1840) | public function isRootEntity(): bool
    method isInheritedAssociation (line 1848) | public function isInheritedAssociation(string $fieldName): bool
    method isInheritedEmbeddedClass (line 1853) | public function isInheritedEmbeddedClass(string $fieldName): bool
    method setTableName (line 1863) | public function setTableName(string $tableName): void
    method setPrimaryTable (line 1880) | public function setPrimaryTable(array $table): void
    method isInheritanceType (line 1920) | private function isInheritanceType(int $type): bool
    method mapField (line 1934) | public function mapField(array $mapping): void
    method addInheritedAssociationMapping (line 1955) | public function addInheritedAssociationMapping(AssociationMapping $map...
    method addInheritedFieldMapping (line 1969) | public function addInheritedFieldMapping(FieldMapping $fieldMapping): ...
    method mapOneToOne (line 1986) | public function mapOneToOne(array $mapping): void
    method mapOneToMany (line 2000) | public function mapOneToMany(array $mapping): void
    method mapManyToOne (line 2014) | public function mapManyToOne(array $mapping): void
    method mapManyToMany (line 2028) | public function mapManyToMany(array $mapping): void
    method _storeAssociationMapping (line 2044) | protected function _storeAssociationMapping(AssociationMapping $assocM...
    method setCustomRepositoryClass (line 2059) | public function setCustomRepositoryClass(string|null $repositoryClassN...
    method invokeLifecycleCallbacks (line 2078) | public function invokeLifecycleCallbacks(string $lifecycleEvent, objec...
    method hasLifecycleCallbacks (line 2088) | public function hasLifecycleCallbacks(string $lifecycleEvent): bool
    method getLifecycleCallbacks (line 2099) | public function getLifecycleCallbacks(string $event): array
    method addLifecycleCallback (line 2107) | public function addLifecycleCallback(string $callback, string $event):...
    method setLifecycleCallbacks (line 2126) | public function setLifecycleCallbacks(array $callbacks): void
    method addEntityListener (line 2140) | public function addEntityListener(string $eventName, string $class, st...
    method setDiscriminatorColumn (line 2182) | public function setDiscriminatorColumn(DiscriminatorColumnMapping|arra...
    method getDiscriminatorColumn (line 2225) | final public function getDiscriminatorColumn(): DiscriminatorColumnMap...
    method setDiscriminatorMap (line 2242) | public function setDiscriminatorMap(array $map): void
    method addDiscriminatorMapClass (line 2280) | public function addDiscriminatorMapClass(int|string $name, string $cla...
    method addSubClasses (line 2301) | public function addSubClasses(array $classes): void
    method addSubClass (line 2308) | public function addSubClass(string $className): void
    method hasAssociation (line 2318) | public function hasAssociation(string $fieldName): bool
    method isSingleValuedAssociation (line 2323) | public function isSingleValuedAssociation(string $fieldName): bool
    method isCollectionValuedAssociation (line 2329) | public function isCollectionValuedAssociation(string $fieldName): bool
    method isAssociationWithSingleJoinColumn (line 2338) | public function isAssociationWithSingleJoinColumn(string $fieldName): ...
    method getSingleAssociationJoinColumnName (line 2350) | public function getSingleAssociationJoinColumnName(string $fieldName):...
    method getSingleAssociationReferencedJoinColumnName (line 2368) | public function getSingleAssociationReferencedJoinColumnName(string $f...
    method getFieldForColumn (line 2388) | public function getFieldForColumn(string $columnName): string
    method setIdGenerator (line 2410) | public function setIdGenerator(AbstractIdGenerator $generator): void
    method setCustomGeneratorDefinition (line 2420) | public function setCustomGeneratorDefinition(array $definition): void
    method setSequenceGeneratorDefinition (line 2442) | public function setSequenceGeneratorDefinition(array $definition): void
    method setVersionMapping (line 2475) | public function setVersionMapping(array &$mapping): void
    method setVersioned (line 2495) | public function setVersioned(bool $bool): void
    method setVersionField (line 2508) | public function setVersionField(string|null $versionField): void
    method markReadOnly (line 2516) | public function markReadOnly(): void
    method getFieldNames (line 2524) | public function getFieldNames(): array
    method getAssociationNames (line 2532) | public function getAssociationNames(): array
    method getAssociationTargetClass (line 2544) | public function getAssociationTargetClass(string $assocName): string
    method getName (line 2550) | public function getName(): string
    method isAssociationInverseSide (line 2555) | public function isAssociationInverseSide(string $assocName): bool
    method getAssociationMappedByTargetField (line 2561) | public function getAssociationMappedByTargetField(string $assocName): ...
    method fullyQualifiedClassName (line 2589) | public function fullyQualifiedClassName(string|null $className): strin...
    method getMetadataValue (line 2609) | public function getMetadataValue(string $name): mixed
    method mapEmbedded (line 2627) | public function mapEmbedded(array $mapping): void
    method inlineEmbeddable (line 2653) | public function inlineEmbeddable(string $property, ClassMetadata $embe...
    method assertFieldNotMapped (line 2683) | private function assertFieldNotMapped(string $fieldName): void
    method getSequenceName (line 2699) | public function getSequenceName(AbstractPlatform $platform): string
    method getSequencePrefix (line 2712) | public function getSequencePrefix(AbstractPlatform $platform): string

FILE: src/Mapping/ClassMetadataFactory.php
  class ClassMetadataFactory (line 53) | class ClassMetadataFactory extends AbstractClassMetadataFactory
    method setEntityManager (line 67) | public function setEntityManager(EntityManagerInterface $em): void
    method getOwningSide (line 88) | final public function getOwningSide(AssociationMapping $maybeOwningSid...
    method initialize (line 110) | protected function initialize(): void
    method onNotFoundMetadata (line 117) | protected function onNotFoundMetadata(string $className): ClassMetadat...
    method doLoadMetadata (line 135) | protected function doLoadMetadata(
    method validateRuntimeMetadata (line 263) | protected function validateRuntimeMetadata(ClassMetadata $class, Class...
    method newClassMetadataInstance (line 305) | protected function newClassMetadataInstance(string $className): ClassM...
    method addDefaultDiscriminatorMap (line 326) | private function addDefaultDiscriminatorMap(ClassMetadata $class): void
    method findAbstractEntityClassesNotListedInDiscriminatorMap (line 352) | private function findAbstractEntityClassesNotListedInDiscriminatorMap(...
    method peekIfIsMappedSuperclass (line 392) | private function peekIfIsMappedSuperclass(string $className): bool
    method getShortName (line 408) | private function getShortName(string $className): string
    method addMappingInheritanceInformation (line 423) | private function addMappingInheritanceInformation(
    method addInheritedFields (line 439) | private function addInheritedFields(ClassMetadata $subClass, ClassMeta...
    method addInheritedRelations (line 457) | private function addInheritedRelations(ClassMetadata $subClass, ClassM...
    method addInheritedEmbeddedClasses (line 476) | private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ...
    method addNestedEmbeddedClasses (line 492) | private function addNestedEmbeddedClasses(
    method addInheritedIndexes (line 521) | private function addInheritedIndexes(ClassMetadata $subClass, ClassMet...
    method completeIdGeneratorMapping (line 546) | private function completeIdGeneratorMapping(ClassMetadata $class): void
    method determineIdGeneratorStrategy (line 620) | private function determineIdGeneratorStrategy(AbstractPlatform $platfo...
    method truncateSequenceName (line 669) | private function truncateSequenceName(string $schemaElementName): string
    method inheritIdGeneratorMapping (line 688) | private function inheritIdGeneratorMapping(ClassMetadata $class, Class...
    method wakeupReflection (line 703) | protected function wakeupReflection(ClassMetadataInterface $class, Ref...
    method initializeReflection (line 720) | protected function initializeReflection(ClassMetadataInterface $class,...
    method getDriver (line 725) | protected function getDriver(): MappingDriver
    method isEntity (line 732) | protected function isEntity(ClassMetadataInterface $class): bool
    method getTargetPlatform (line 737) | private function getTargetPlatform(): Platforms\AbstractPlatform

FILE: src/Mapping/Column.php
  class Column (line 10) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 20) | public function __construct(

FILE: src/Mapping/CustomIdGenerator.php
  class CustomIdGenerator (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 12) | public function __construct(

FILE: src/Mapping/DefaultEntityListenerResolver.php
  class DefaultEntityListenerResolver (line 12) | class DefaultEntityListenerResolver implements EntityListenerResolver
    method clear (line 17) | public function clear(string|null $className = null): void
    method register (line 29) | public function register(object $object): void
    method resolve (line 34) | public function resolve(string $className): object

FILE: src/Mapping/DefaultNamingStrategy.php
  class DefaultNamingStrategy (line 17) | class DefaultNamingStrategy implements NamingStrategy
    method classToTableName (line 19) | public function classToTableName(string $className): string
    method propertyToColumnName (line 28) | public function propertyToColumnName(string $propertyName, string $cla...
    method embeddedFieldToColumnName (line 33) | public function embeddedFieldToColumnName(
    method referenceColumnName (line 42) | public function referenceColumnName(): string
    method joinColumnName (line 47) | public function joinColumnName(string $propertyName, string $className...
    method joinTableName (line 52) | public function joinTableName(
    method joinKeyColumnName (line 61) | public function joinKeyColumnName(

FILE: src/Mapping/DefaultQuoteStrategy.php
  class DefaultQuoteStrategy (line 23) | class DefaultQuoteStrategy implements QuoteStrategy
    method getColumnName (line 27) | public function getColumnName(string $fieldName, ClassMetadata $class,...
    method getTableName (line 39) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
    method getSequenceName (line 61) | public function getSequenceName(array $definition, ClassMetadata $clas...
    method getJoinColumnName (line 71) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
    method getReferencedJoinColumnName (line 78) | public function getReferencedJoinColumnName(
    method getJoinTableName (line 88) | public function getJoinTableName(
    method getIdentifierColumnNames (line 111) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
    method getColumnAlias (line 139) | public function getColumnAlias(

FILE: src/Mapping/DefaultTypedFieldMapper.php
  class DefaultTypedFieldMapper (line 25) | final class DefaultTypedFieldMapper implements TypedFieldMapper
    method __construct (line 42) | public function __construct(array $typedFieldMappings = [])
    method validateAndComplete (line 55) | public function validateAndComplete(array $mapping, ReflectionProperty...

FILE: src/Mapping/DiscriminatorColumn.php
  class DiscriminatorColumn (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/DiscriminatorColumnMapping.php
  class DiscriminatorColumnMapping (line 15) | final class DiscriminatorColumnMapping implements ArrayAccess
    method __construct (line 30) | public function __construct(
    method fromMappingArray (line 48) | public static function fromMappingArray(array $mappingArray): self
    method __sleep (line 71) | public function __sleep(): array

FILE: src/Mapping/DiscriminatorMap.php
  class DiscriminatorMap (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/Driver/AttributeDriver.php
  class AttributeDriver (line 26) | class AttributeDriver implements MappingDriver
    method __construct (line 42) | public function __construct(array|ClassLocator $paths, bool $reportFie...
    method isTransient (line 60) | public function isTransient(string $className): bool
    method loadMetadataForClass (line 82) | public function loadMetadataForClass(string $className, PersistenceCla...
    method getFetchMode (line 604) | private function getFetchMode(string $className, string $fetchMode): int
    method getGeneratedMode (line 618) | private function getGeneratedMode(string $generatedMode): int
    method getMethodCallbacks (line 633) | private function getMethodCallbacks(ReflectionMethod $method): array
    method joinColumnToArray (line 689) | private function joinColumnToArray(Mapping\JoinColumn|Mapping\InverseJ...
    method columnToArray (line 727) | private function columnToArray(string $fieldName, Mapping\Column $colu...

FILE: src/Mapping/Driver/AttributeReader.php
  class AttributeReader (line 21) | final class AttributeReader
    method getClassAttributes (line 31) | public function getClassAttributes(ReflectionClass $class): array
    method getMethodAttributes (line 41) | public function getMethodAttributes(ReflectionMethod $method): array
    method getPropertyAttributes (line 51) | public function getPropertyAttributes(ReflectionProperty $property): a...
    method getPropertyAttribute (line 63) | public function getPropertyAttribute(ReflectionProperty $property, str...
    method getPropertyAttributeCollection (line 82) | public function getPropertyAttributeCollection(
    method convertToAttributeInstances (line 103) | private function convertToAttributeInstances(array $attributes): array
    method isRepeatable (line 135) | private function isRepeatable(string $attributeClassName): bool

FILE: src/Mapping/Driver/DatabaseDriver.php
  class DatabaseDriver (line 53) | class DatabaseDriver implements MappingDriver
    method __construct (line 91) | public function __construct(private readonly AbstractSchemaManager $sm)
    method setNamespace (line 99) | public function setNamespace(string $namespace): void
    method isTransient (line 104) | public function isTransient(string $className): bool
    method getAllClassNames (line 112) | public function getAllClassNames(): array
    method setClassNameForTable (line 122) | public function setClassNameForTable(string $tableName, string $classN...
    method setFieldNameForColumn (line 130) | public function setFieldNameForColumn(string $tableName, string $colum...
    method setTables (line 143) | public function setTables(array $entityTables, array $manyToManyTables...
    method setInflector (line 159) | public function setInflector(Inflector $inflector): void
    method loadMetadataForClass (line 172) | public function loadMetadataForClass(string $className, PersistenceCla...
    method reverseEngineerMappingFromDatabase (line 273) | private function reverseEngineerMappingFromDatabase(): void
    method buildIndexes (line 329) | private function buildIndexes(ClassMetadata $metadata): void
    method buildFieldMappings (line 360) | private function buildFieldMappings(ClassMetadata $metadata): void
    method buildFieldMapping (line 420) | private function buildFieldMapping(string $tableName, Column $column):...
    method buildToOneAssociationMappings (line 470) | private function buildToOneAssociationMappings(ClassMetadata $metadata...
    method getTablePrimaryKeys (line 517) | private function getTablePrimaryKeys(Table $table): array
    method getClassNameForTable (line 537) | private function getClassNameForTable(string $tableName): string
    method getFieldNameForColumn (line 551) | private function getFieldNameForColumn(
    method getReferencedTableName (line 570) | private static function getReferencedTableName(ForeignKeyConstraint $f...
    method getReferencingColumnNames (line 580) | private static function getReferencingColumnNames(ForeignKeyConstraint...
    method getReferencedColumnNames (line 590) | private static function getReferencedColumnNames(ForeignKeyConstraint ...
    method getIndexedColumns (line 600) | private static function getIndexedColumns(Index $index): array
    method getPrimaryKey (line 609) | private static function getPrimaryKey(Table $table): Index|null
    method getAssetName (line 632) | private static function getAssetName(AbstractAsset $asset): string

FILE: src/Mapping/Driver/LoadMappingFileImplementation.php
  type LoadMappingFileImplementation (line 13) | trait LoadMappingFileImplementation
    method loadMappingFile (line 18) | protected function loadMappingFile($file): array
    method loadMappingFile (line 30) | protected function loadMappingFile($file)
  type LoadMappingFileImplementation (line 25) | trait LoadMappingFileImplementation
    method loadMappingFile (line 18) | protected function loadMappingFile($file): array
    method loadMappingFile (line 30) | protected function loadMappingFile($file)

FILE: src/Mapping/Driver/ReflectionBasedDriver.php
  type ReflectionBasedDriver (line 11) | trait ReflectionBasedDriver
    method isRepeatedPropertyDeclaration (line 23) | private function isRepeatedPropertyDeclaration(ReflectionProperty $pro...

FILE: src/Mapping/Driver/RepeatableAttributeCollection.php
  class RepeatableAttributeCollection (line 14) | final class RepeatableAttributeCollection extends ArrayObject

FILE: src/Mapping/Driver/SimplifiedXmlDriver.php
  class SimplifiedXmlDriver (line 12) | class SimplifiedXmlDriver extends XmlDriver
    method __construct (line 19) | public function __construct($prefixes, $fileExtension = self::DEFAULT_...

FILE: src/Mapping/Driver/XmlDriver.php
  class XmlDriver (line 42) | class XmlDriver extends FileDriver
    method __construct (line 51) | public function __construct(
    method loadMetadataForClass (line 80) | public function loadMetadataForClass($className, PersistenceClassMetad...
    method parseOptions (line 662) | private function parseOptions(SimpleXMLElement|null $options): array
    method parseObjectElement (line 713) | private function parseObjectElement(SimpleXMLElement $objectElement): ...
    method joinColumnToArray (line 747) | private function joinColumnToArray(SimpleXMLElement $joinColumnElement...
    method columnToArray (line 799) | private function columnToArray(SimpleXMLElement $fieldMapping): array
    method cacheToArray (line 874) | private function cacheToArray(SimpleXMLElement $cacheMapping): array
    method getCascadeMappings (line 901) | private function getCascadeMappings(SimpleXMLElement $cascadeElement):...
    method doLoadMappingFile (line 920) | private function doLoadMappingFile(string $file): array
    method validateMapping (line 951) | private function validateMapping(string $file): void
    method evaluateBoolean (line 972) | protected function evaluateBoolean(mixed $element): bool

FILE: src/Mapping/Embeddable.php
  class Embeddable (line 9) | #[Attribute(Attribute::TARGET_CLASS)]

FILE: src/Mapping/Embedded.php
  class Embedded (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 12) | public function __construct(

FILE: src/Mapping/EmbeddedClassMapping.php
  class EmbeddedClassMapping (line 12) | final class EmbeddedClassMapping implements ArrayAccess
    method __construct (line 46) | public function __construct(public string $class)
    method fromMappingArray (line 60) | public static function fromMappingArray(array $mappingArray): self
    method __sleep (line 77) | public function __sleep(): array

FILE: src/Mapping/Entity.php
  class Entity (line 11) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 15) | public function __construct(

FILE: src/Mapping/EntityListenerResolver.php
  type EntityListenerResolver (line 10) | interface EntityListenerResolver
    method clear (line 17) | public function clear(string|null $className = null): void;
    method resolve (line 24) | public function resolve(string $className): object;
    method register (line 29) | public function register(object $object): void;

FILE: src/Mapping/EntityListeners.php
  class EntityListeners (line 13) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/Exception/InvalidCustomGenerator.php
  class InvalidCustomGenerator (line 13) | final class InvalidCustomGenerator extends LogicException implements ORM...
    method onClassNotConfigured (line 15) | public static function onClassNotConfigured(): self
    method onMissingClass (line 21) | public static function onMissingClass(array $definition): self

FILE: src/Mapping/Exception/UnknownGeneratorType.php
  class UnknownGeneratorType (line 10) | final class UnknownGeneratorType extends LogicException implements ORMEx...
    method create (line 12) | public static function create(int $generatorType): self

FILE: src/Mapping/FieldMapping.php
  class FieldMapping (line 14) | final class FieldMapping implements ArrayAccess
    method __construct (line 84) | public function __construct(
    method fromMappingArray (line 120) | public static function fromMappingArray(array $mappingArray): self
    method __sleep (line 141) | public function __sleep(): array

FILE: src/Mapping/GeneratedValue.php
  class GeneratedValue (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/GetReflectionClassImplementation.php
  type GetReflectionClassImplementation (line 13) | trait GetReflectionClassImplementation
    method getReflectionClass (line 15) | public function getReflectionClass(): ReflectionClass
    method getReflectionClass (line 28) | public function getReflectionClass(): ReflectionClass|null
  type GetReflectionClassImplementation (line 21) | trait GetReflectionClassImplementation
    method getReflectionClass (line 15) | public function getReflectionClass(): ReflectionClass
    method getReflectionClass (line 28) | public function getReflectionClass(): ReflectionClass|null

FILE: src/Mapping/HasLifecycleCallbacks.php
  class HasLifecycleCallbacks (line 9) | #[Attribute(Attribute::TARGET_CLASS)]

FILE: src/Mapping/Id.php
  class Id (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]

FILE: src/Mapping/Index.php
  class Index (line 9) | #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
    method __construct (line 18) | public function __construct(

FILE: src/Mapping/InheritanceType.php
  class InheritanceType (line 9) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/InverseJoinColumn.php
  class InverseJoinColumn (line 9) | #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]

FILE: src/Mapping/InverseSideMapping.php
  class InverseSideMapping (line 7) | abstract class InverseSideMapping extends AssociationMapping
    method backRefFieldName (line 17) | final public function backRefFieldName(): string
    method __sleep (line 23) | public function __sleep(): array

FILE: src/Mapping/JoinColumn.php
  class JoinColumn (line 9) | #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]

FILE: src/Mapping/JoinColumnMapping.php
  class JoinColumnMapping (line 12) | final class JoinColumnMapping implements ArrayAccess
    method __construct (line 27) | public function __construct(
    method fromMappingArray (line 47) | public static function fromMappingArray(array $mappingArray): self
    method __sleep (line 60) | public function __sleep(): array

FILE: src/Mapping/JoinColumnProperties.php
  type JoinColumnProperties (line 7) | trait JoinColumnProperties
    method __construct (line 10) | public function __construct(

FILE: src/Mapping/JoinColumns.php
  class JoinColumns (line 7) | final class JoinColumns implements MappingAttribute
    method __construct (line 10) | public function __construct(

FILE: src/Mapping/JoinTable.php
  class JoinTable (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 23) | public function __construct(

FILE: src/Mapping/JoinTableMapping.php
  class JoinTableMapping (line 13) | final class JoinTableMapping implements ArrayAccess
    method __construct (line 30) | public function __construct(public string $name)
    method fromMappingArray (line 45) | public static function fromMappingArray(array $mappingArray): self
    method offsetSet (line 70) | public function offsetSet(mixed $offset, mixed $value): void
    method toArray (line 85) | public function toArray(): array
    method __sleep (line 102) | public function __sleep(): array

FILE: src/Mapping/LegacyReflectionFields.php
  class LegacyReflectionFields (line 27) | class LegacyReflectionFields implements ArrayAccess, IteratorAggregate
    method __construct (line 32) | public function __construct(private ClassMetadata $classMetadata, priv...
    method offsetExists (line 37) | public function offsetExists($offset): bool // phpcs:ignore
    method offsetGet (line 53) | public function offsetGet($field): mixed // phpcs:ignore
    method offsetSet (line 123) | public function offsetSet($offset, $value): void // phpcs:ignore
    method offsetUnset (line 129) | public function offsetUnset($offset): void // phpcs:ignore
    method getAccessibleProperty (line 135) | private function getAccessibleProperty(string $class, string $field): ...
    method getIterator (line 156) | public function getIterator(): Traversable

FILE: src/Mapping/ManyToMany.php
  class ManyToMany (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/ManyToManyAssociationMapping.php
  type ManyToManyAssociationMapping (line 7) | interface ManyToManyAssociationMapping extends ToManyAssociationMapping

FILE: src/Mapping/ManyToManyInverseSideMapping.php
  class ManyToManyInverseSideMapping (line 7) | final class ManyToManyInverseSideMapping extends ToManyInverseSideMappin...

FILE: src/Mapping/ManyToManyOwningSideMapping.php
  class ManyToManyOwningSideMapping (line 12) | final class ManyToManyOwningSideMapping extends ToManyOwningSideMapping ...
    method toArray (line 31) | public function toArray(): array
    method fromMappingArrayAndNamingStrategy (line 62) | public static function fromMappingArrayAndNamingStrategy(array $mappin...
    method __sleep (line 213) | public function __sleep(): array

FILE: src/Mapping/ManyToOne.php
  class ManyToOne (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/ManyToOneAssociationMapping.php
  class ManyToOneAssociationMapping (line 10) | final class ManyToOneAssociationMapping extends ToOneOwningSideMapping

FILE: src/Mapping/MappedSuperclass.php
  class MappedSuperclass (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 14) | public function __construct(

FILE: src/Mapping/MappingAttribute.php
  type MappingAttribute (line 8) | interface MappingAttribute

FILE: src/Mapping/MappingException.php
  class MappingException (line 27) | class MappingException extends PersistenceMappingException implements OR...
    method identifierRequired (line 30) | public static function identifierRequired(string $entityName): self
    method invalidAssociationType (line 47) | public static function invalidAssociationType(string $entityName, stri...
    method invalidInheritanceType (line 57) | public static function invalidInheritanceType(string $entityName, int ...
    method generatorNotAllowedWithCompositeId (line 62) | public static function generatorNotAllowedWithCompositeId(): self
    method missingFieldName (line 67) | public static function missingFieldName(string $entity): self
    method missingTargetEntity (line 75) | public static function missingTargetEntity(string $fieldName): self
    method missingSourceEntity (line 80) | public static function missingSourceEntity(string $fieldName): self
    method missingEmbeddedClass (line 85) | public static function missingEmbeddedClass(string $fieldName): self
    method mappingFileNotFound (line 90) | public static function mappingFileNotFound(string $entityName, string ...
    method invalidOverrideFieldName (line 100) | public static function invalidOverrideFieldName(string $className, str...
    method invalidOverrideFieldType (line 110) | public static function invalidOverrideFieldType(string $className, str...
    method mappingNotFound (line 119) | public static function mappingNotFound(string $className, string $fiel...
    method queryNotFound (line 124) | public static function queryNotFound(string $className, string $queryN...
    method resultMappingNotFound (line 129) | public static function resultMappingNotFound(string $className, string...
    method emptyQueryMapping (line 134) | public static function emptyQueryMapping(string $entity, string $query...
    method nameIsMandatoryForQueryMapping (line 139) | public static function nameIsMandatoryForQueryMapping(string $classNam...
    method missingQueryMapping (line 144) | public static function missingQueryMapping(string $entity, string $que...
    method missingResultSetMappingEntity (line 153) | public static function missingResultSetMappingEntity(string $entity, s...
    method missingResultSetMappingFieldName (line 162) | public static function missingResultSetMappingFieldName(string $entity...
    method oneToManyRequiresMappedBy (line 171) | public static function oneToManyRequiresMappedBy(string $entityName, s...
    method joinTableRequired (line 180) | public static function joinTableRequired(string $fieldName): self
    method missingRequiredOption (line 193) | public static function missingRequiredOption(string $field, string $ex...
    method invalidMapping (line 207) | public static function invalidMapping(string $fieldName): self
    method reflectionFailure (line 219) | public static function reflectionFailure(string $entity, ReflectionExc...
    method joinColumnMustPointToMappedField (line 224) | public static function joinColumnMustPointToMappedField(string $classN...
    method joinColumnNotAllowedOnOneToOneInverseSide (line 233) | public static function joinColumnNotAllowedOnOneToOneInverseSide(strin...
    method classIsNotAValidEntityOrMappedSuperClass (line 243) | public static function classIsNotAValidEntityOrMappedSuperClass(string...
    method duplicateFieldMapping (line 264) | public static function duplicateFieldMapping(string $entity, string $f...
    method duplicateAssociationMapping (line 273) | public static function duplicateAssociationMapping(string $entity, str...
    method duplicateQueryMapping (line 282) | public static function duplicateQueryMapping(string $entity, string $q...
    method duplicateResultSetMapping (line 291) | public static function duplicateResultSetMapping(string $entity, strin...
    method singleIdNotAllowedOnCompositePrimaryKey (line 300) | public static function singleIdNotAllowedOnCompositePrimaryKey(string ...
    method noIdDefined (line 305) | public static function noIdDefined(string $entity): self
    method unsupportedOptimisticLockingType (line 310) | public static function unsupportedOptimisticLockingType(string $entity...
    method fileMappingDriversRequireConfiguredDirectoryPath (line 320) | public static function fileMappingDriversRequireConfiguredDirectoryPat...
    method invalidEntriesInDiscriminatorMap (line 340) | public static function invalidEntriesInDiscriminatorMap(array $entries...
    method invalidClassInDiscriminatorMap (line 357) | public static function invalidClassInDiscriminatorMap(string $classNam...
    method duplicateDiscriminatorEntry (line 371) | public static function duplicateDiscriminatorEntry(string $className, ...
    method missingInheritanceTypeDeclaration (line 388) | public static function missingInheritanceTypeDeclaration(string $rootE...
    method missingDiscriminatorMap (line 397) | public static function missingDiscriminatorMap(string $className): self
    method missingDiscriminatorColumn (line 405) | public static function missingDiscriminatorColumn(string $className): ...
    method invalidDiscriminatorColumnType (line 413) | public static function invalidDiscriminatorColumnType(string $classNam...
    method nameIsMandatoryForDiscriminatorColumns (line 422) | public static function nameIsMandatoryForDiscriminatorColumns(string $...
    method cannotVersionIdField (line 427) | public static function cannotVersionIdField(string $className, string ...
    method duplicateColumnName (line 436) | public static function duplicateColumnName(string $className, string $...
    method illegalToManyAssociationOnMappedSuperclass (line 441) | public static function illegalToManyAssociationOnMappedSuperclass(stri...
    method cannotMapCompositePrimaryKeyEntitiesAsForeignId (line 446) | public static function cannotMapCompositePrimaryKeyEntitiesAsForeignId...
    method noSingleAssociationJoinColumnFound (line 452) | public static function noSingleAssociationJoinColumnFound(string $clas...
    method noFieldNameFoundForColumn (line 457) | public static function noFieldNameFoundForColumn(string $className, st...
    method illegalOrphanRemovalOnIdentifierAssociation (line 467) | public static function illegalOrphanRemovalOnIdentifierAssociation(str...
    method illegalOrphanRemoval (line 476) | public static function illegalOrphanRemoval(string $className, string ...
    method illegalInverseIdentifierAssociation (line 482) | public static function illegalInverseIdentifierAssociation(string $cla...
    method illegalToManyIdentifierAssociation (line 491) | public static function illegalToManyIdentifierAssociation(string $clas...
    method noInheritanceOnMappedSuperClass (line 500) | public static function noInheritanceOnMappedSuperClass(string $classNa...
    method mappedClassNotPartOfDiscriminatorMap (line 505) | public static function mappedClassNotPartOfDiscriminatorMap(string $cl...
    method lifecycleCallbackMethodNotFound (line 514) | public static function lifecycleCallbackMethodNotFound(string $classNa...
    method illegalLifecycleCallbackOnEmbeddedClass (line 520) | public static function illegalLifecycleCallbackOnEmbeddedClass(string ...
    method entityListenerClassNotFound (line 532) | public static function entityListenerClassNotFound(string $listenerNam...
    method entityListenerMethodNotFound (line 537) | public static function entityListenerMethodNotFound(string $listenerNa...
    method duplicateEntityListener (line 542) | public static function duplicateEntityListener(string $listenerName, s...
    method invalidFetchMode (line 548) | public static function invalidFetchMode(string $className, string $fet...
    method invalidGeneratedMode (line 553) | public static function invalidGeneratedMode(int|string $generatedMode)...
    method compositeKeyAssignedIdGeneratorRequired (line 558) | public static function compositeKeyAssignedIdGeneratorRequired(string ...
    method invalidTargetEntityClass (line 563) | public static function invalidTargetEntityClass(string $targetEntity, ...
    method invalidCascadeOption (line 569) | public static function invalidCascadeOption(array $cascades, string $c...
    method missingSequenceName (line 581) | public static function missingSequenceName(string $className): self
    method infiniteEmbeddableNesting (line 588) | public static function infiniteEmbeddableNesting(string $className, st...
    method illegalOverrideOfInheritedProperty (line 600) | public static function illegalOverrideOfInheritedProperty(string $clas...
    method invalidIndexConfiguration (line 612) | public static function invalidIndexConfiguration(string $className, st...
    method invalidUniqueConstraintConfiguration (line 623) | public static function invalidUniqueConstraintConfiguration(string $cl...
    method invalidOverrideType (line 634) | public static function invalidOverrideType(string $expectdType, mixed ...
    method backedEnumTypeRequired (line 643) | public static function backedEnumTypeRequired(string $className, strin...
    method nonEnumTypeMapped (line 653) | public static function nonEnumTypeMapped(string $className, string $fi...
    method invalidEnumValue (line 667) | public static function invalidEnumValue(
    method fromLibXmlErrors (line 689) | public static function fromLibXmlErrors(array $errors): self
    method invalidAttributeOnEmbeddable (line 701) | public static function invalidAttributeOnEmbeddable(string $entityName...
    method mappingVirtualPropertyNotAllowed (line 710) | public static function mappingVirtualPropertyNotAllowed(string $entity...

FILE: src/Mapping/NamingStrategy.php
  type NamingStrategy (line 12) | interface NamingStrategy
    method classToTableName (line 19) | public function classToTableName(string $className): string;
    method propertyToColumnName (line 26) | public function propertyToColumnName(string $propertyName, string $cla...
    method embeddedFieldToColumnName (line 34) | public function embeddedFieldToColumnName(
    method referenceColumnName (line 44) | public function referenceColumnName(): string;
    method joinColumnName (line 51) | public function joinColumnName(string $propertyName, string $className...
    method joinTableName (line 59) | public function joinTableName(string $sourceEntity, string $targetEnti...
    method joinKeyColumnName (line 70) | public function joinKeyColumnName(string $entityName, string|null $ref...

FILE: src/Mapping/OneToMany.php
  class OneToMany (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/OneToManyAssociationMapping.php
  class OneToManyAssociationMapping (line 7) | final class OneToManyAssociationMapping extends ToManyInverseSideMapping
    method fromMappingArray (line 31) | public static function fromMappingArray(array $mappingArray): static
    method fromMappingArrayAndName (line 64) | public static function fromMappingArrayAndName(array $mappingArray, st...

FILE: src/Mapping/OneToOne.php
  class OneToOne (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/OneToOneAssociationMapping.php
  type OneToOneAssociationMapping (line 7) | interface OneToOneAssociationMapping extends ToOneAssociationMapping

FILE: src/Mapping/OneToOneInverseSideMapping.php
  class OneToOneInverseSideMapping (line 7) | final class OneToOneInverseSideMapping extends ToOneInverseSideMapping i...

FILE: src/Mapping/OneToOneOwningSideMapping.php
  class OneToOneOwningSideMapping (line 7) | final class OneToOneOwningSideMapping extends ToOneOwningSideMapping imp...

FILE: src/Mapping/OrderBy.php
  class OrderBy (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 13) | public function __construct(

FILE: src/Mapping/OwningSideMapping.php
  class OwningSideMapping (line 7) | abstract class OwningSideMapping extends AssociationMapping
    method __sleep (line 18) | public function __sleep(): array

FILE: src/Mapping/PostLoad.php
  class PostLoad (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PostPersist.php
  class PostPersist (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PostRemove.php
  class PostRemove (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PostUpdate.php
  class PostUpdate (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PreFlush.php
  class PreFlush (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PrePersist.php
  class PrePersist (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PreRemove.php
  class PreRemove (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PreUpdate.php
  class PreUpdate (line 9) | #[Attribute(Attribute::TARGET_METHOD)]

FILE: src/Mapping/PropertyAccessors/EmbeddablePropertyAccessor.php
  class EmbeddablePropertyAccessor (line 11) | class EmbeddablePropertyAccessor implements PropertyAccessor
    method __construct (line 15) | public function __construct(
    method setValue (line 23) | public function setValue(object $object, mixed $value): void
    method getValue (line 38) | public function getValue(object $object): mixed
    method getUnderlyingReflector (line 49) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/PropertyAccessors/EnumPropertyAccessor.php
  class EnumPropertyAccessor (line 15) | class EnumPropertyAccessor implements PropertyAccessor
    method __construct (line 18) | public function __construct(private PropertyAccessor $parent, private ...
    method setValue (line 22) | public function setValue(object $object, mixed $value): void
    method getValue (line 31) | public function getValue(object $object): mixed
    method fromEnum (line 47) | private function fromEnum($enum) // phpcs:ignore
    method toEnum (line 63) | private function toEnum($value): BackedEnum|array
    method getUnderlyingReflector (line 81) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/PropertyAccessors/ObjectCastPropertyAccessor.php
  class ObjectCastPropertyAccessor (line 13) | class ObjectCastPropertyAccessor implements PropertyAccessor
    method fromNames (line 16) | public static function fromNames(string $class, string $name): self
    method fromReflectionProperty (line 25) | public static function fromReflectionProperty(ReflectionProperty $refl...
    method __construct (line 33) | private function __construct(private ReflectionProperty $reflectionPro...
    method setValue (line 37) | public function setValue(object $object, mixed $value): void
    method getValue (line 52) | public function getValue(object $object): mixed
    method getUnderlyingReflector (line 57) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/PropertyAccessors/PropertyAccessor.php
  type PropertyAccessor (line 20) | interface PropertyAccessor
    method setValue (line 22) | public function setValue(object $object, mixed $value): void;
    method getValue (line 24) | public function getValue(object $object): mixed;
    method getUnderlyingReflector (line 26) | public function getUnderlyingReflector(): ReflectionProperty;

FILE: src/Mapping/PropertyAccessors/PropertyAccessorFactory.php
  class PropertyAccessorFactory (line 11) | class PropertyAccessorFactory
    method createPropertyAccessor (line 14) | public static function createPropertyAccessor(string $className, strin...

FILE: src/Mapping/PropertyAccessors/RawValuePropertyAccessor.php
  class RawValuePropertyAccessor (line 22) | class RawValuePropertyAccessor implements PropertyAccessor
    method fromReflectionProperty (line 24) | public static function fromReflectionProperty(ReflectionProperty $refl...
    method __construct (line 32) | private function __construct(private ReflectionProperty $reflectionPro...
    method setValue (line 39) | public function setValue(object $object, mixed $value): void
    method getValue (line 54) | public function getValue(object $object): mixed
    method getUnderlyingReflector (line 59) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/PropertyAccessors/ReadonlyAccessor.php
  class ReadonlyAccessor (line 16) | class ReadonlyAccessor implements PropertyAccessor
    method __construct (line 18) | public function __construct(private PropertyAccessor $parent, private ...
    method setValue (line 29) | public function setValue(object $object, mixed $value): void
    method getValue (line 51) | public function getValue(object $object): mixed
    method getUnderlyingReflector (line 56) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/PropertyAccessors/TypedNoDefaultPropertyAccessor.php
  class TypedNoDefaultPropertyAccessor (line 15) | class TypedNoDefaultPropertyAccessor implements PropertyAccessor
    method __construct (line 19) | public function __construct(private PropertyAccessor $parent, private ...
    method setValue (line 38) | public function setValue(object $object, mixed $value): void
    method getValue (line 60) | public function getValue(object $object): mixed
    method getUnderlyingReflector (line 65) | public function getUnderlyingReflector(): ReflectionProperty

FILE: src/Mapping/QuoteStrategy.php
  type QuoteStrategy (line 12) | interface QuoteStrategy
    method getColumnName (line 17) | public function getColumnName(string $fieldName, ClassMetadata $class,...
    method getTableName (line 22) | public function getTableName(ClassMetadata $class, AbstractPlatform $p...
    method getSequenceName (line 29) | public function getSequenceName(array $definition, ClassMetadata $clas...
    method getJoinTableName (line 32) | public function getJoinTableName(
    method getJoinColumnName (line 41) | public function getJoinColumnName(JoinColumnMapping $joinColumn, Class...
    method getReferencedJoinColumnName (line 46) | public function getReferencedJoinColumnName(
    method getIdentifierColumnNames (line 57) | public function getIdentifierColumnNames(ClassMetadata $class, Abstrac...
    method getColumnAlias (line 62) | public function getColumnAlias(

FILE: src/Mapping/ReflectionEmbeddedProperty.php
  class ReflectionEmbeddedProperty (line 19) | final class ReflectionEmbeddedProperty extends ReflectionProperty
    method __construct (line 28) | public function __construct(
    method getValue (line 36) | public function getValue(object|null $object = null): mixed
    method setValue (line 47) | public function setValue(mixed $object, mixed $value = null): void

FILE: src/Mapping/ReflectionEnumProperty.php
  class ReflectionEnumProperty (line 15) | final class ReflectionEnumProperty extends ReflectionProperty
    method __construct (line 18) | public function __construct(
    method getValue (line 28) | public function getValue(object|null $object = null): int|string|array...
    method setValue (line 54) | public function setValue(mixed $object, mixed $value = null): void
    method initializeEnumValue (line 67) | private function initializeEnumValue(object $object, int|string|Backed...

FILE: src/Mapping/ReflectionReadonlyProperty.php
  class ReflectionReadonlyProperty (line 18) | final class ReflectionReadonlyProperty extends ReflectionProperty
    method __construct (line 20) | public function __construct(
    method getValue (line 30) | public function getValue(object|null $object = null): mixed
    method setValue (line 35) | public function setValue(mixed $objectOrValue, mixed $value = null): void

FILE: src/Mapping/SequenceGenerator.php
  class SequenceGenerator (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]
    method __construct (line 12) | public function __construct(

FILE: src/Mapping/Table.php
  class Table (line 10) | #[Attribute(Attribute::TARGET_CLASS)]
    method __construct (line 18) | public function __construct(

FILE: src/Mapping/ToManyAssociationMapping.php
  type ToManyAssociationMapping (line 7) | interface ToManyAssociationMapping
    method isIndexed (line 10) | public function isIndexed(): bool;
    method indexBy (line 12) | public function indexBy(): string;
    method orderBy (line 15) | public function orderBy(): array;

FILE: src/Mapping/ToManyAssociationMappingImplementation.php
  type ToManyAssociationMappingImplementation (line 12) | trait ToManyAssociationMappingImplementation
    method orderBy (line 30) | final public function orderBy(): array
    method isIndexed (line 36) | final public function isIndexed(): bool
    method indexBy (line 41) | final public function indexBy(): string
    method __sleep (line 55) | public function __sleep(): array

FILE: src/Mapping/ToManyInverseSideMapping.php
  class ToManyInverseSideMapping (line 7) | abstract class ToManyInverseSideMapping extends InverseSideMapping imple...

FILE: src/Mapping/ToManyOwningSideMapping.php
  class ToManyOwningSideMapping (line 7) | abstract class ToManyOwningSideMapping extends OwningSideMapping

FILE: src/Mapping/ToOneAssociationMapping.php
  type ToOneAssociationMapping (line 7) | interface ToOneAssociationMapping

FILE: src/Mapping/ToOneInverseSideMapping.php
  class ToOneInverseSideMapping (line 7) | abstract class ToOneInverseSideMapping extends InverseSideMapping
    method fromMappingArrayAndName (line 32) | public static function fromMappingArrayAndName(

FILE: src/Mapping/ToOneOwningSideMapping.php
  class ToOneOwningSideMapping (line 15) | abstract class ToOneOwningSideMapping extends OwningSideMapping implemen...
    method fromMappingArray (line 52) | public static function fromMappingArray(array $mappingArray): static
    method fromMappingArrayAndName (line 99) | public static function fromMappingArrayAndName(
    method offsetSet (line 195) | public function offsetSet(mixed $offset, mixed $value): void
    method toArray (line 212) | public function toArray(): array
    method __sleep (line 232) | public function __sleep(): array

FILE: src/Mapping/TypedFieldMapper.php
  type TypedFieldMapper (line 10) | interface TypedFieldMapper
    method validateAndComplete (line 19) | public function validateAndComplete(array $mapping, ReflectionProperty...

FILE: src/Mapping/UnderscoreNamingStrategy.php
  class UnderscoreNamingStrategy (line 23) | class UnderscoreNamingStrategy implements NamingStrategy
    method __construct (line 30) | public function __construct(private int $case = CASE_LOWER)
    method getCase (line 35) | public function getCase(): int
    method setCase (line 44) | public function setCase(int $case): void
    method classToTableName (line 49) | public function classToTableName(string $className): string
    method propertyToColumnName (line 58) | public function propertyToColumnName(string $propertyName, string $cla...
    method embeddedFieldToColumnName (line 63) | public function embeddedFieldToColumnName(
    method referenceColumnName (line 72) | public function referenceColumnName(): string
    method joinColumnName (line 77) | public function joinColumnName(string $propertyName, string $className...
    method joinTableName (line 82) | public function joinTableName(
    method joinKeyColumnName (line 90) | public function joinKeyColumnName(
    method underscore (line 98) | private function underscore(string $string): string

FILE: src/Mapping/UniqueConstraint.php
  class UniqueConstraint (line 9) | #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)]
    method __construct (line 17) | public function __construct(

FILE: src/Mapping/Version.php
  class Version (line 9) | #[Attribute(Attribute::TARGET_PROPERTY)]

FILE: src/NativeQuery.php
  class NativeQuery (line 20) | class NativeQuery extends AbstractQuery
    method setSQL (line 25) | public function setSQL(string $sql): self
    method getSQL (line 32) | public function getSQL(): string
    method _doExecute (line 37) | protected function _doExecute(): Result|int

FILE: src/NoResultException.php
  class NoResultException (line 10) | class NoResultException extends UnexpectedResultException
    method __construct (line 12) | public function __construct()

FILE: src/NonUniqueResultException.php
  class NonUniqueResultException (line 10) | class NonUniqueResultException extends UnexpectedResultException
    method __construct (line 14) | public function __construct(string|null $message = null)

FILE: src/ORMInvalidArgumentException.php
  class ORMInvalidArgumentException (line 25) | class ORMInvalidArgumentException extends InvalidArgumentException
    method scheduleInsertForManagedEntity (line 27) | public static function scheduleInsertForManagedEntity(object $entity):...
    method scheduleInsertForRemovedEntity (line 32) | public static function scheduleInsertForRemovedEntity(object $entity):...
    method scheduleInsertTwice (line 37) | public static function scheduleInsertTwice(object $entity): self
    method entityWithoutIdentity (line 42) | public static function entityWithoutIdentity(string $className, object...
    method readOnlyRequiresManagedEntity (line 50) | public static function readOnlyRequiresManagedEntity(object $entity): ...
    method newEntitiesFoundThroughRelationships (line 56) | public static function newEntitiesFoundThroughRelationships(array $new...
    method newEntityFoundThroughRelationship (line 78) | public static function newEntityFoundThroughRelationship(AssociationMa...
    method detachedEntityFoundThroughRelationship (line 83) | public static function detachedEntityFoundThroughRelationship(Associat...
    method entityNotManaged (line 90) | public static function entityNotManaged(object $entity): self
    method entityHasNoIdentity (line 96) | public static function entityHasNoIdentity(object $entity, string $ope...
    method entityIsRemoved (line 101) | public static function entityIsRemoved(object $entity, string $operati...
    method detachedEntityCannot (line 106) | public static function detachedEntityCannot(object $entity, string $op...
    method invalidObject (line 111) | public static function invalidObject(string $context, mixed $given, in...
    method invalidCompositeIdentifier (line 117) | public static function invalidCompositeIdentifier(): self
    method invalidIdentifierBindingEntity (line 123) | public static function invalidIdentifierBindingEntity(string $class): ...
    method invalidAssociation (line 135) | public static function invalidAssociation(ClassMetadata $targetClass, ...
    method invalidAutoGenerateMode (line 148) | public static function invalidAutoGenerateMode(mixed $value): self
    method missingPrimaryKeyValue (line 153) | public static function missingPrimaryKeyValue(string $className, strin...
    method proxyDirectoryRequired (line 158) | public static function proxyDirectoryRequired(): self
    method lazyGhostUnavailable (line 163) | public static function lazyGhostUnavailable(): self
    method proxyNamespaceRequired (line 168) | public static function proxyNamespaceRequired(): self
    method proxyDirectoryNotWritable (line 173) | public static function proxyDirectoryNotWritable(string $proxyDirector...
    method objToStr (line 181) | private static function objToStr(object $obj): string
    method newEntityFoundThroughRelationshipMessage (line 186) | private static function newEntityFoundThroughRelationshipMessage(Assoc...

FILE: src/ORMSetup.php
  class ORMSetup (line 27) | final class ORMSetup
    method createAttributeMetadataConfiguration (line 34) | public static function createAttributeMetadataConfiguration(
    method createAttributeMetadataConfig (line 61) | public static function createAttributeMetadataConfig(
    method createXMLMetadataConfiguration (line 78) | public static function createXMLMetadataConfiguration(
    method createXMLMetadataConfig (line 106) | public static function createXMLMetadataConfig(
    method createConfiguration (line 126) | public static function createConfiguration(
    method createConfig (line 157) | public static function createConfig(
    method createCacheInstance (line 171) | private static function createCacheInstance(
    method __construct (line 211) | private function __construct()

FILE: src/OptimisticLockException.php
  class OptimisticLockException (line 16) | class OptimisticLockException extends Exception implements ORMException
    method __construct (line 18) | public function __construct(
    method getEntity (line 29) | public function getEntity(): object|string|null
    method lockFailed (line 35) | public static function lockFailed(object|string $entity): self
    method lockFailedVersionMismatch (line 40) | public static function lockFailedVersionMismatch(
    method notVersioned (line 51) | public static function notVersioned(string $entityName): self

FILE: src/PersistentCollection.php
  class PersistentCollection (line 43) | final class PersistentCollection extends AbstractLazyCollection implemen...
    method __construct (line 85) | public function __construct(
    method setOwner (line 99) | public function setOwner(object $entity, AssociationMapping&ToManyAsso...
    method getOwner (line 110) | public function getOwner(): object|null
    method getTypeClass (line 115) | public function getTypeClass(): ClassMetadata
    method getUnitOfWork (line 122) | private function getUnitOfWork(): UnitOfWork
    method hydrateAdd (line 134) | public function hydrateAdd(mixed $element): void
    method hydrateSet (line 160) | public function hydrateSet(mixed $key, mixed $element): void
    method initialize (line 180) | public function initialize(): void
    method takeSnapshot (line 195) | public function takeSnapshot(): void
    method getSnapshot (line 207) | public function getSnapshot(): array
    method getDeleteDiff (line 218) | public function getDeleteDiff(): array
    method getInsertDiff (line 234) | public function getInsertDiff(): array
    method getMapping (line 245) | public function getMapping(): AssociationMapping&ToManyAssociationMapping
    method changed (line 257) | private function changed(): void
    method isDirty (line 270) | public function isDirty(): bool
    method setDirty (line 278) | public function setDirty(bool $dirty): void
    method setInitialized (line 286) | public function setInitialized(bool $bool): void
    method remove (line 291) | public function remove(string|int $key): mixed
    method removeElement (line 317) | public function removeElement(mixed $element): bool
    method containsKey (line 339) | public function containsKey(mixed $key): bool
    method contains (line 353) | public function contains(mixed $element): bool
    method get (line 364) | public function get(string|int $key): mixed
    method count (line 383) | public function count(): int
    method set (line 394) | public function set(string|int $key, mixed $value): void
    method add (line 405) | public function add(mixed $value): bool
    method offsetExists (line 418) | public function offsetExists(mixed $offset): bool
    method offsetGet (line 423) | public function offsetGet(mixed $offset): mixed
    method offsetSet (line 428) | public function offsetSet(mixed $offset, mixed $value): void
    method offsetUnset (line 439) | public function offsetUnset(mixed $offset): void
    method isEmpty (line 444) | public function isEmpty(): bool
    method clear (line 449) | public function clear(): void
    method __sleep (line 497) | public function __sleep(): array
    method __wakeup (line 502) | public function __wakeup(): void
    method first (line 510) | public function first()
    method slice (line 531) | public function slice(int $offset, int|null $length = null): array
    method __clone (line 553) | public function __clone()
    method matching (line 575) | public function matching(Criteria $criteria): Collection
    method unwrap (line 618) | public function unwrap(): Selectable&Collection
    method doInitialize (line 626) | protected function doInitialize(): void
    method restoreNewObjectsInDirtyCollection (line 652) | private function restoreNewObjectsInDirtyCollection(array $newObjects)...

FILE: src/Persisters/Collection/AbstractCollectionPersister.php
  class AbstractCollectionPersister (line 16) | abstract class AbstractCollectionPersister implements CollectionPersister
    method __construct (line 26) | public function __construct(
    method isValidEntityState (line 38) | protected function isValidEntityState(object $entity): bool

FILE: src/Persisters/Collection/CollectionPersister.php
  type CollectionPersister (line 13) | interface CollectionPersister
    method delete (line 18) | public function delete(PersistentCollection $collection): void;
    method update (line 24) | public function update(PersistentCollection $collection): void;
    method count (line 29) | public function count(PersistentCollection $collection): int;
    method slice (line 36) | public function slice(PersistentCollection $collection, int $offset, i...
    method contains (line 41) | public function contains(PersistentCollection $collection, object $ele...
    method containsKey (line 46) | public function containsKey(PersistentCollection $collection, mixed $k...
    method get (line 51) | public function get(PersistentCollection $collection, mixed $index): m...
    method loadCriteria (line 58) | public function loadCriteria(PersistentCollection $collection, Criteri...

FILE: src/Persisters/Collection/ManyToManyPersister.php
  class ManyToManyPersister (line 34) | class ManyToManyPersister extends AbstractCollectionPersister
    method delete (line 36) | public function delete(PersistentCollection $collection): void
    method update (line 56) | public function update(PersistentCollection $collection): void
    method get (line 84) | public function get(PersistentCollection $collection, mixed $index): o...
    method count (line 109) | public function count(PersistentCollection $collection): int
    method slice (line 165) | public function slice(PersistentCollection $collection, int $offset, i...
    method containsKey (line 173) | public function containsKey(PersistentCollection $collection, mixed $k...
    method contains (line 192) | public function contains(PersistentCollection $collection, object $ele...
    method loadCriteria (line 212) | public function loadCriteria(PersistentCollection $collection, Criteri...
    method getFilterSql (line 305) | public function getFilterSql(AssociationMapping $mapping): array
    method generateFilterConditionSQL (line 331) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...
    method getOnConditionSQL (line 353) | protected function getOnConditionSQL(AssociationMapping $mapping): array
    method getDeleteSQL (line 373) | protected function getDeleteSQL(PersistentCollection $collection): string
    method getDeleteSQLParameters (line 394) | protected function getDeleteSQLParameters(PersistentCollection $collec...
    method getDeleteRowSQL (line 425) | protected function getDeleteRowSQL(PersistentCollection $collection): ...
    method getDeleteRowSQLParameters (line 460) | protected function getDeleteRowSQLParameters(PersistentCollection $col...
    method getInsertRowSQL (line 472) | protected function getInsertRowSQL(PersistentCollection $collection): ...
    method getInsertRowSQLParameters (line 509) | protected function getInsertRowSQLParameters(PersistentCollection $col...
    method collectJoinTableColumnParameters (line 521) | private function collectJoinTableColumnParameters(
    method getJoinTableRestrictionsWithKey (line 570) | private function getJoinTableRestrictionsWithKey(
    method getJoinTableRestrictions (line 660) | private function getJoinTableRestrictions(
    method expandCriteriaParameters (line 724) | private function expandCriteriaParameters(Criteria $criteria): array
    method getOrderingSql (line 741) | private function getOrderingSql(Criteria $criteria, ClassMetadata $tar...
    method getLimitSql (line 762) | private function getLimitSql(Criteria $criteria): string
    method getMapping (line 770) | private function getMapping(PersistentCollection $collection): Associa...

FILE: src/Persisters/Collection/OneToManyPersister.php
  class OneToManyPersister (line 30) | class OneToManyPersister extends AbstractCollectionPersister
    method delete (line 32) | public function delete(PersistentCollection $collection): void
    method update (line 53) | public function update(PersistentCollection $collection): void
    method get (line 61) | public function get(PersistentCollection $collection, mixed $index): o...
    method count (line 84) | public function count(PersistentCollection $collection): int
    method slice (line 100) | public function slice(PersistentCollection $collection, int $offset, i...
    method containsKey (line 108) | public function containsKey(PersistentCollection $collection, mixed $k...
    method contains (line 129) | public function contains(PersistentCollection $collection, object $ele...
    method loadCriteria (line 149) | public function loadCriteria(PersistentCollection $collection, Criteri...
    method deleteEntityCollection (line 159) | private function deleteEntityCollection(PersistentCollection $collecti...
    method deleteJoinedEntityCollection (line 203) | private function deleteJoinedEntityCollection(PersistentCollection $co...
    method getMapping (line 262) | private function getMapping(PersistentCollection $collection): OneToMa...

FILE: src/Persisters/Entity/AbstractEntityInheritancePersister.php
  class AbstractEntityInheritancePersister (line 17) | abstract class AbstractEntityInheritancePersister extends BasicEntityPer...
    method prepareInsertData (line 22) | protected function prepareInsertData(object $entity): array
    method getDiscriminatorColumnTableName (line 37) | abstract protected function getDiscriminatorColumnTableName(): string;
    method getSelectColumnSQL (line 39) | protected function getSelectColumnSQL(string $field, ClassMetadata $cl...
    method getSelectJoinColumnSQL (line 58) | protected function getSelectJoinColumnSQL(string $tableAlias, string $...

FILE: src/Persisters/Entity/BasicEntityPersister.php
  class BasicEntityPersister (line 97) | class BasicEntityPersister implements EntityPersister
    method __construct (line 176) | public function __construct(
    method isFilterHashUpToDate (line 196) | final protected function isFilterHashUpToDate(): bool
    method updateFilterHash (line 201) | final protected function updateFilterHash(): void
    method getClassMetadata (line 206) | public function getClassMetadata(): ClassMetadata
    method getResultSetMapping (line 211) | public function getResultSetMapping(): ResultSetMapping
    method addInsert (line 216) | public function addInsert(object $entity): void
    method getInserts (line 224) | public function getInserts(): array
    method executeInserts (line 229) | public function executeInserts(): void
    method assignDefaultVersionAndUpsertableValues (line 288) | protected function assignDefaultVersionAndUpsertableValues(object $ent...
    method fetchVersionAndNotUpsertableValues (line 305) | protected function fetchVersionAndNotUpsertableValues(ClassMetadata $v...
    method extractIdentifierTypes (line 349) | final protected function extractIdentifierTypes(array $id, ClassMetada...
    method update (line 360) | public function update(object $entity): void
    method updateTable (line 399) | final protected function updateTable(
    method deleteJoinTableRecords (line 507) | protected function deleteJoinTableRecords(array $identifier, array $ty...
    method delete (line 556) | public function delete(object $entity): bool
    method prepareUpdateData (line 593) | protected function prepareUpdateData(object $entity, bool $isInsert = ...
    method prepareInsertData (line 712) | protected function prepareInsertData(object $entity): array
    method getOwningTable (line 717) | public function getOwningTable(string $fieldName): string
    method load (line 725) | public function load(
    method loadById (line 754) | public function loadById(array $identifier, object|null $entity = null...
    method loadOneToOneEntity (line 762) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
    method refresh (line 849) | public function refresh(array $id, object $entity, LockMode|int|null $...
    method count (line 859) | public function count(array|Criteria $criteria = []): int
    method loadCriteria (line 876) | public function loadCriteria(Criteria $criteria): array
    method expandCriteriaParameters (line 897) | public function expandCriteriaParameters(Criteria $criteria): array
    method loadAll (line 953) | public function loadAll(
    method getManyToManyCollection (line 973) | public function getManyToManyCollection(
    method loadArrayFromResult (line 992) | private function loadArrayFromResult(AssociationMapping $assoc, Result...
    method loadCollectionFromStatement (line 1010) | private function loadCollectionFromStatement(
    method loadManyToManyCollection (line 1032) | public function loadManyToManyCollection(AssociationMapping $assoc, ob...
    method getManyToManyStatement (line 1041) | private function getManyToManyStatement(
    method getSelectSQL (line 1109) | public function getSelectSQL(
    method getCountSQL (line 1169) | public function getCountSQL(array|Criteria $criteria = []): string
    method getOrderBySQL (line 1200) | final protected function getOrderBySQL(array $orderBy, string $baseTab...
    method getSelectColumnsSQL (line 1257) | protected function getSelectColumnsSQL(): string
    method getSelectColumnAssociationSQL (line 1381) | protected function getSelectColumnAssociationSQL(
    method getSelectManyToManyJoinSQL (line 1413) | protected function getSelectManyToManyJoinSQL(AssociationMapping&ManyT...
    method getInsertSQL (line 1434) | public function getInsertSQL(): string
    method getInsertColumnList (line 1477) | protected function getInsertColumnList(): array
    method getSelectColumnSQL (line 1521) | protected function getSelectColumnSQL(string $field, ClassMetadata $cl...
    method getSQLTableAlias (line 1553) | protected function getSQLTableAlias(string $className, string $assocNa...
    method lock (line 1573) | public function lock(array $criteria, LockMode|int $lockMode): void
    method getLockTablesSql (line 1600) | protected function getLockTablesSql(LockMode|int $lockMode): string
    method getSelectConditionCriteriaSQL (line 1613) | protected function getSelectConditionCriteriaSQL(Criteria $criteria): ...
    method getSelectConditionStatementSQL (line 1626) | public function getSelectConditionStatementSQL(
    method getSelectConditionStatementColumnSQL (line 1711) | private function getSelectConditionStatementColumnSQL(
    method getSelectConditionSQL (line 1783) | protected function getSelectConditionSQL(array $criteria, AssociationM...
    method getOneToManyCollection (line 1797) | public function getOneToManyCollection(
    method loadOneToManyCollection (line 1811) | public function loadOneToManyCollection(
    method getOneToManyStatement (line 1823) | private function getOneToManyStatement(
    method expandParameters (line 1878) | public function expandParameters(array $criteria): array
    method expandToManyParameters (line 1917) | private function expandToManyParameters(array $criteria): array
    method exists (line 1934) | public function exists(object $entity, Criteria|null $extraConditions ...
    method getJoinSQLForJoinColumns (line 1973) | protected function getJoinSQLForJoinColumns(array $joinColumns): string
    method getSQLColumnAlias (line 1985) | public function getSQLColumnAlias(string $columnName): string
    method generateFilterConditionSQL (line 1998) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...
    method switchPersisterContext (line 2019) | protected function switchPersisterContext(int|null $offset, int|null $...
    method getClassIdentifiersTypes (line 2034) | protected function getClassIdentifiersTypes(ClassMetadata $class): array

FILE: src/Persisters/Entity/CachedPersisterContext.php
  class CachedPersisterContext (line 19) | class CachedPersisterContext
    method __construct (line 45) | public function __construct(

FILE: src/Persisters/Entity/EntityPersister.php
  type EntityPersister (line 21) | interface EntityPersister
    method getClassMetadata (line 23) | public function getClassMetadata(): ClassMetadata;
    method getResultSetMapping (line 28) | public function getResultSetMapping(): ResultSetMapping;
    method getInserts (line 35) | public function getInserts(): array;
    method getInsertSQL (line 43) | public function getInsertSQL(): string;
    method getSelectSQL (line 53) | public function getSelectSQL(
    method getCountSQL (line 67) | public function getCountSQL(array|Criteria $criteria = []): string;
    method expandParameters (line 76) | public function expandParameters(array $criteria): array;
    method expandCriteriaParameters (line 83) | public function expandCriteriaParameters(Criteria $criteria): array;
    method getSelectConditionStatementSQL (line 86) | public function getSelectConditionStatementSQL(
    method addInsert (line 97) | public function addInsert(object $entity): void;
    method executeInserts (line 104) | public function executeInserts(): void;
    method update (line 110) | public function update(object $entity): void;
    method delete (line 122) | public function delete(object $entity): bool;
    method count (line 131) | public function count(array|Criteria $criteria = []): int;
    method getOwningTable (line 140) | public function getOwningTable(string $fieldName): string;
    method load (line 165) | public function load(
    method loadById (line 185) | public function loadById(array $identifier, object|null $entity = null...
    method loadOneToOneEntity (line 201) | public function loadOneToOneEntity(AssociationMapping $assoc, object $...
    method refresh (line 214) | public function refresh(array $id, object $entity, LockMode|int|null $...
    method loadCriteria (line 221) | public function loadCriteria(Criteria $criteria): array;
    method loadAll (line 231) | public function loadAll(
    method getManyToManyCollection (line 243) | public function getManyToManyCollection(
    method loadManyToManyCollection (line 259) | public function loadManyToManyCollection(
    method loadOneToManyCollection (line 270) | public function loadOneToManyCollection(
    method lock (line 282) | public function lock(array $criteria, LockMode|int $lockMode): void;
    method getOneToManyCollection (line 289) | public function getOneToManyCollection(
    method exists (line 299) | public function exists(object $entity, Criteria|null $extraConditions ...

FILE: src/Persisters/Entity/JoinedSubclassPersister.php
  class JoinedSubclassPersister (line 29) | class JoinedSubclassPersister extends AbstractEntityInheritancePersister
    method getDiscriminatorColumnTableName (line 49) | protected function getDiscriminatorColumnTableName(): string
    method getVersionedClassMetadata (line 62) | private function getVersionedClassMetadata(): ClassMetadata
    method getOwningTable (line 76) | public function getOwningTable(string $fieldName): string
    method executeInserts (line 99) | public function executeInserts(): void
    method update (line 194) | public function update(object $entity): void
    method delete (line 229) | public function delete(object $entity): bool
    method getSelectSQL (line 245) | public function getSelectSQL(
    method getCountSQL (line 315) | public function getCountSQL(array|Criteria $criteria = []): string
    method getLockTablesSql (line 339) | protected function getLockTablesSql(LockMode|int $lockMode): string
    method getSelectColumnsSQL (line 365) | protected function getSelectColumnsSQL(): string
    method getInsertColumnList (line 463) | protected function getInsertColumnList(): array
    method assignDefaultVersionAndUpsertableValues (line 509) | protected function assignDefaultVersionAndUpsertableValues(object $ent...
    method fetchVersionAndNotUpsertableValues (line 523) | protected function fetchVersionAndNotUpsertableValues(ClassMetadata $v...
    method getJoinSql (line 574) | private function getJoinSql(string $baseTableAlias): string

FILE: src/Persisters/Entity/SingleTablePersister.php
  class SingleTablePersister (line 26) | class SingleTablePersister extends AbstractEntityInheritancePersister
    method getDiscriminatorColumnTableName (line 30) | protected function getDiscriminatorColumnTableName(): string
    method getSelectColumnsSQL (line 35) | protected function getSelectColumnsSQL(): string
    method getInsertColumnList (line 100) | protected function getInsertColumnList(): array
    method getSQLTableAlias (line 110) | protected function getSQLTableAlias(string $className, string $assocNa...
    method getSelectConditionSQL (line 118) | protected function getSelectConditionSQL(array $criteria, AssociationM...
    method getSelectConditionCriteriaSQL (line 129) | protected function getSelectConditionCriteriaSQL(Criteria $criteria): ...
    method getSelectConditionDiscriminatorValueSQL (line 140) | protected function getSelectConditionDiscriminatorValueSQL(): string
    method generateFilterConditionSQL (line 159) | protected function generateFilterConditionSQL(ClassMetadata $targetEnt...

FILE: src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php
  class CantUseInOperatorOnCompositeKeys (line 9) | class CantUseInOperatorOnCompositeKeys extends PersisterException
    method create (line 11) | public static function create(): self

FILE: src/Persisters/Exception/InvalidOrientation.php
  class InvalidOrientation (line 9) | class InvalidOrientation extends PersisterException
    method fromClassNameAndField (line 11) | public static function fromClassNameAndField(string $className, string...

FILE: src/Persisters/Exception/UnrecognizedField.php
  class UnrecognizedField (line 11) | final class UnrecognizedField extends PersisterException
    method byName (line 14) | public static function byName(string $field): self
    method byFullyQualifiedName (line 20) | public static function byFullyQualifiedName(string $className, string ...

FILE: src/Persisters/MatchingAssociationFieldRequiresObject.php
  class MatchingAssociationFieldRequiresObject (line 11) | final class MatchingAssociationFieldRequiresObject extends PersisterExce...
    method fromClassAndAssociation (line 13) | public static function fromClassAndAssociation(string $class, string $...

FILE: src/Persisters/PersisterException.php
  class PersisterException (line 12) | class PersisterException extends Exception implements ORMException
    method matchingAssocationFieldRequiresObject (line 14) | public static function matchingAssocationFieldRequiresObject(string $c...

FILE: src/Persisters/SqlExpressionVisitor.php
  class SqlExpressionVisitor (line 22) | class SqlExpressionVisitor extends ExpressionVisitor
    method __construct (line 24) | public function __construct(
    method walkComparison (line 31) | public function walkComparison(Comparison $comparison): string
    method walkCompositeExpression (line 56) | public function walkCompositeExpression(CompositeExpression $expr): st...
    method walkValue (line 75) | public function walkValue(Value $value): string

FILE: src/Persisters/SqlValueVisitor.php
  class SqlValueVisitor (line 15) | class SqlValueVisitor extends ExpressionVisitor
    method walkComparison (line 28) | public function walkComparison(Comparison $comparison)
    method walkCompositeExpression (line 43) | public function walkCompositeExpression(CompositeExpression $expr)
    method walkValue (line 57) | public function walkValue(Value $value)
    method getParamsAndTypes (line 68) | public function getParamsAndTypes(): array
    method getValueFromComparison (line 77) | protected function getValueFromComparison(Comparison $comparison): mixed

FILE: src/PessimisticLockException.php
  class PessimisticLockException (line 10) | class PessimisticLockException extends RuntimeException implements ORMEx...
    method lockFailed (line 12) | public static function lockFailed(): self

FILE: src/Proxy/Autoloader.php
  class Autoloader (line 24) | final class Autoloader
    method resolveFile (line 37) | public static function resolveFile(string $proxyDir, string $proxyName...
    method register (line 68) | public static function register(

FILE: src/Proxy/DefaultProxyClassNameResolver.php
  class DefaultProxyClassNameResolver (line 20) | final class DefaultProxyClassNameResolver implements ProxyClassNameResolver
    method resolveClassName (line 22) | public function resolveClassName(string $className): string
    method getClass (line 43) | public static function getClass(object $object): string

FILE: src/Proxy/InternalProxy.php
  type InternalProxy (line 15) | interface InternalProxy extends Proxy
    method __setInitialized (line 17) | public function __setInitialized(bool $initialized): void;

FILE: src/Proxy/NotAProxyClass.php
  class NotAProxyClass (line 12) | final class NotAProxyClass extends InvalidArgumentException implements O...
    method __construct (line 14) | public function __construct(string $className, string $proxyNamespace)

FILE: src/Proxy/ProxyFactory.php
  class ProxyFactory (line 60) | class ProxyFactory
    method __construct (line 150) | public function __construct(
    method getProxy (line 210) | public function getProxy(string $className, array $identifier): object
    method generateProxyClasses (line 254) | public function generateProxyClasses(array $classes, string|null $prox...
    method skipClass (line 278) | protected function skipClass(ClassMetadata $metadata): bool
    method createLazyInitializer (line 292) | private function createLazyInitializer(ClassMetadata $classMetadata, E...
    method getProxyFileName (line 320) | private function getProxyFileName(string $className, string $baseDirec...
    method getProxyFactory (line 328) | private function getProxyFactory(string $className): Closure
    method loadProxyClass (line 391) | private function loadProxyClass(ClassMetadata $class): string
    method generateProxyClass (line 428) | private function generateProxyClass(ClassMetadata $class, string|null ...
    method generateUseLazyGhostTrait (line 471) | private function generateUseLazyGhostTrait(ClassMetadata $class): string
    method generateSerializeImpl (line 494) | private function generateSerializeImpl(ClassMetadata $class): string
    method generateProxyClassName (line 523) | private static function generateProxyClassName(string $className, stri...

FILE: src/Query.php
  class Query (line 46) | class Query extends AbstractQuery
    method getSQL (line 176) | public function getSQL(): string|array
    method getAST (line 184) | public function getAST(): SelectStatement|UpdateStatement|DeleteStatement
    method getResultSetMapping (line 191) | protected function getResultSetMapping(): ResultSetMapping
    method parse (line 206) | private function parse(): ParserResult
    method _doExecute (line 255) | protected function _doExecute(): Result|int
    method evictResultSetCache (line 304) | private function evictResultSetCache(
    method evictEntityCacheRegion (line 329) | private function evictEntityCacheRegion(): void
    method processParameterMappings (line 354) | private function processParameterMappings(array $paramMappings): array
    method resolveParameterValue (line 403) | private function resolveParameterValue(Parameter $parameter): array
    method setQueryCache (line 437) | public function setQueryCache(CacheItemPoolInterface|null $queryCache)...
    method useQueryCache (line 449) | public function useQueryCache(bool $bool): self
    method setQueryCacheLifetime (line 463) | public function setQueryCacheLifetime(int|null $timeToLive): self
    method getQueryCacheLifetime (line 473) | public function getQueryCacheLifetime(): int|null
    method expireQueryCache (line 483) | public function expireQueryCache(bool $expire = true): self
    method getExpireQueryCache (line 493) | public function getExpireQueryCache(): bool
    method free (line 498) | public function free(): void
    method setDQL (line 509) | public function setDQL(string $dqlQuery): self
    method getDQL (line 520) | public function getDQL(): string|null
    method getState (line 536) | public function getState(): int
    method contains (line 546) | public function contains(string $dql): bool
    method setFirstResult (line 558) | public function setFirstResult(int $firstResult): self
    method getFirstResult (line 572) | public function getFirstResult(): int
    method setMaxResults (line 582) | public function setMaxResults(int|null $maxResults): self
    method getMaxResults (line 596) | public function getMaxResults(): int|null
    method toIterable (line 602) | public function toIterable(iterable $parameters = [], $hydrationMode =...
    method setHint (line 609) | public function setHint(string $name, mixed $value): static
    method setHydrationMode (line 616) | public function setHydrationMode(string|int $hydrationMode): static
    method setLockMode (line 634) | public function setLockMode(LockMode|int $lockMode): self
    method getLockMode (line 653) | public function getLockMode(): LockMode|int|null
    method getQueryCacheId (line 667) | protected function getQueryCacheId(): string
    method getHash (line 700) | protected function getHash(): string
    method __clone (line 708) | public function __clone()
    method getSqlExecutor (line 715) | private function getSqlExecutor(): AbstractSqlExecutor

FILE: src/Query/AST/ASTException.php
  class ASTException (line 14) | class ASTException extends QueryException
    method noDispatchForNode (line 16) | public static function noDispatchForNode(Node $node): self

FILE: src/Query/AST/AggregateExpression.php
  class AggregateExpression (line 9) | class AggregateExpression extends Node
    method __construct (line 12) | public function __construct(
    method dispatch (line 19) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ArithmeticExpression.php
  class ArithmeticExpression (line 14) | class ArithmeticExpression extends Node
    method isSimpleArithmeticExpression (line 20) | public function isSimpleArithmeticExpression(): bool
    method isSubselect (line 25) | public function isSubselect(): bool
    method dispatch (line 30) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ArithmeticFactor.php
  class ArithmeticFactor (line 14) | class ArithmeticFactor extends Node
    method __construct (line 16) | public function __construct(
    method isPositiveSigned (line 22) | public function isPositiveSigned(): bool
    method isNegativeSigned (line 27) | public function isNegativeSigned(): bool
    method dispatch (line 32) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ArithmeticTerm.php
  class ArithmeticTerm (line 14) | class ArithmeticTerm extends Node
    method __construct (line 17) | public function __construct(public array $arithmeticFactors)
    method dispatch (line 21) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/BetweenExpression.php
  class BetweenExpression (line 9) | class BetweenExpression extends Node
    method __construct (line 11) | public function __construct(
    method dispatch (line 19) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/CoalesceExpression.php
  class CoalesceExpression (line 14) | class CoalesceExpression extends Node
    method __construct (line 17) | public function __construct(public array $scalarExpressions)
    method dispatch (line 21) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/CollectionMemberExpression.php
  class CollectionMemberExpression (line 14) | class CollectionMemberExpression extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 23) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ComparisonExpression.php
  class ComparisonExpression (line 19) | class ComparisonExpression extends Node
    method __construct (line 21) | public function __construct(
    method dispatch (line 28) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ConditionalExpression.php
  class ConditionalExpression (line 14) | class ConditionalExpression extends Node
    method __construct (line 17) | public function __construct(public array $conditionalTerms)
    method dispatch (line 21) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ConditionalFactor.php
  class ConditionalFactor (line 14) | class ConditionalFactor extends Node implements Phase2OptimizableConditi...
    method __construct (line 16) | public function __construct(
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ConditionalPrimary.php
  class ConditionalPrimary (line 14) | class ConditionalPrimary extends Node implements Phase2OptimizableCondit...
    method isSimpleConditionalExpression (line 20) | public function isSimpleConditionalExpression(): bool
    method isConditionalExpression (line 25) | public function isConditionalExpression(): bool
    method dispatch (line 30) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ConditionalTerm.php
  class ConditionalTerm (line 14) | class ConditionalTerm extends Node implements Phase2OptimizableConditional
    method __construct (line 17) | public function __construct(public array $conditionalFactors)
    method dispatch (line 21) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/DeleteClause.php
  class DeleteClause (line 14) | class DeleteClause extends Node
    method __construct (line 18) | public function __construct(public string $abstractSchemaName)
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/DeleteStatement.php
  class DeleteStatement (line 14) | class DeleteStatement extends Node
    method __construct (line 18) | public function __construct(public DeleteClause $deleteClause)
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/EmptyCollectionComparisonExpression.php
  class EmptyCollectionComparisonExpression (line 14) | class EmptyCollectionComparisonExpression extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/EntityAsDtoArgumentExpression.php
  class EntityAsDtoArgumentExpression (line 14) | class EntityAsDtoArgumentExpression extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 26) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/ExistsExpression.php
  class ExistsExpression (line 14) | class ExistsExpression extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/FromClause.php
  class FromClause (line 14) | class FromClause extends Node
    method __construct (line 17) | public function __construct(public array $identificationVariableDeclar...
    method dispatch (line 21) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/Functions/AbsFunction.php
  class AbsFunction (line 17) | class AbsFunction extends FunctionNode
    method getSql (line 21) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 28) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/AvgFunction.php
  class AvgFunction (line 14) | final class AvgFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/BitAndFunction.php
  class BitAndFunction (line 17) | class BitAndFunction extends FunctionNode
    method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 32) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/BitOrFunction.php
  class BitOrFunction (line 17) | class BitOrFunction extends FunctionNode
    method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 32) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/ConcatFunction.php
  class ConcatFunction (line 17) | class ConcatFunction extends FunctionNode
    method getSql (line 25) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 38) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/CountFunction.php
  class CountFunction (line 17) | final class CountFunction extends FunctionNode implements TypedExpression
    method getSql (line 21) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 26) | public function parse(Parser $parser): void
    method getReturnType (line 31) | public function getReturnType(): Type

FILE: src/Query/AST/Functions/CurrentDateFunction.php
  class CurrentDateFunction (line 16) | class CurrentDateFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/CurrentTimeFunction.php
  class CurrentTimeFunction (line 16) | class CurrentTimeFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/CurrentTimestampFunction.php
  class CurrentTimestampFunction (line 16) | class CurrentTimestampFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/DateAddFunction.php
  class DateAddFunction (line 21) | class DateAddFunction extends FunctionNode
    method getSql (line 27) | public function getSql(SqlWalker $sqlWalker): string
    method dispatchIntervalExpression (line 65) | private function dispatchIntervalExpression(SqlWalker $sqlWalker): string
    method parse (line 70) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/DateDiffFunction.php
  class DateDiffFunction (line 17) | class DateDiffFunction extends FunctionNode
    method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 30) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/DateSubFunction.php
  class DateSubFunction (line 18) | class DateSubFunction extends DateAddFunction
    method getSql (line 20) | public function getSql(SqlWalker $sqlWalker): string
    method dispatchIntervalExpression (line 58) | private function dispatchIntervalExpression(SqlWalker $sqlWalker): string

FILE: src/Query/AST/Functions/FunctionNode.php
  class FunctionNode (line 18) | abstract class FunctionNode extends Node
    method __construct (line 20) | public function __construct(public string $name)
    method getSql (line 24) | abstract public function getSql(SqlWalker $sqlWalker): string;
    method dispatch (line 26) | public function dispatch(SqlWalker $sqlWalker): string
    method parse (line 31) | abstract public function parse(Parser $parser): void;

FILE: src/Query/AST/Functions/IdentityFunction.php
  class IdentityFunction (line 22) | class IdentityFunction extends FunctionNode
    method getSql (line 28) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 72) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/LengthFunction.php
  class LengthFunction (line 20) | class LengthFunction extends FunctionNode implements TypedExpression
    method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 31) | public function parse(Parser $parser): void
    method getReturnType (line 41) | public function getReturnType(): Type

FILE: src/Query/AST/Functions/LocateFunction.php
  class LocateFunction (line 17) | class LocateFunction extends FunctionNode
    method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 42) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/LowerFunction.php
  class LowerFunction (line 19) | class LowerFunction extends FunctionNode
    method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 31) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/MaxFunction.php
  class MaxFunction (line 14) | final class MaxFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/MinFunction.php
  class MinFunction (line 14) | final class MinFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/ModFunction.php
  class ModFunction (line 17) | class ModFunction extends FunctionNode
    method getSql (line 22) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 30) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/SizeFunction.php
  class SizeFunction (line 19) | class SizeFunction extends FunctionNode
    method getSql (line 27) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 104) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/SqrtFunction.php
  class SqrtFunction (line 19) | class SqrtFunction extends FunctionNode
    method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 31) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/SubstringFunction.php
  class SubstringFunction (line 17) | class SubstringFunction extends FunctionNode
    method getSql (line 24) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 38) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/SumFunction.php
  class SumFunction (line 14) | final class SumFunction extends FunctionNode
    method getSql (line 18) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 23) | public function parse(Parser $parser): void

FILE: src/Query/AST/Functions/TrimFunction.php
  class TrimFunction (line 21) | class TrimFunction extends FunctionNode
    method getSql (line 29) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 46) | public function parse(Parser $parser): void
    method getTrimMode (line 72) | private function getTrimMode(): TrimMode|int
    method parseTrimMode (line 89) | private function parseTrimMode(Parser $parser): void

FILE: src/Query/AST/Functions/UpperFunction.php
  class UpperFunction (line 19) | class UpperFunction extends FunctionNode
    method getSql (line 23) | public function getSql(SqlWalker $sqlWalker): string
    method parse (line 31) | public function parse(Parser $parser): void

FILE: src/Query/AST/GeneralCaseExpression.php
  class GeneralCaseExpression (line 14) | class GeneralCaseExpression extends Node
    method __construct (line 17) | public function __construct(
    method dispatch (line 23) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/GroupByClause.php
  class GroupByClause (line 9) | class GroupByClause extends Node
    method __construct (line 12) | public function __construct(public array $groupByItems)
    method dispatch (line 16) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/HavingClause.php
  class HavingClause (line 9) | class HavingClause extends Node
    method __construct (line 11) | public function __construct(public ConditionalExpression|Phase2Optimiz...
    method dispatch (line 15) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/IdentificationVariableDeclaration.php
  class IdentificationVariableDeclaration (line 14) | class IdentificationVariableDeclaration extends Node
    method __construct (line 17) | public function __construct(
    method dispatch (line 24) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/InListExpression.php
  class InListExpression (line 9) | class InListExpression extends Node
    method __construct (line 12) | public function __construct(
    method dispatch (line 19) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/InSubselectExpression.php
  class InSubselectExpression (line 9) | class InSubselectExpression extends Node
    method __construct (line 11) | public function __construct(
    method dispatch (line 18) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/IndexBy.php
  class IndexBy (line 14) | class IndexBy extends Node
    method __construct (line 16) | public function __construct(public PathExpression $singleValuedPathExp...
    method dispatch (line 20) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/InputParameter.php
  class InputParameter (line 14) | class InputParameter extends Node
    method __construct (line 20) | public function __construct(string $value)
    method dispatch (line 31) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/InstanceOfExpression.php
  class InstanceOfExpression (line 15) | class InstanceOfExpression extends Node
    method __construct (line 18) | public function __construct(
    method dispatch (line 25) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/Join.php
  class Join (line 15) | class Join extends Node
    method __construct (line 24) | public function __construct(
    method dispatch (line 30) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/JoinAssociationDeclaration.php
  class JoinAssociationDeclaration (line 14) | class JoinAssociationDeclaration extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 23) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/JoinAssociationPathExpression.php
  class JoinAssociationPathExpression (line 12) | class JoinAssociationPathExpression extends Node
    method __construct (line 14) | public function __construct(

FILE: src/Query/AST/JoinClassPathExpression.php
  class JoinClassPathExpression (line 14) | class JoinClassPathExpression extends Node
    method __construct (line 16) | public function __construct(
    method dispatch (line 22) | public function dispatch(SqlWalker $walker): string

FILE: src/Query/AST/JoinVariableDeclaration.php
  class JoinVariableDeclaration (line 14) | class JoinVariableDeclaration extends Node
    method __construct (line 16) | public function __construct(public Join $join, public IndexBy|null $in...
    method dispatch (line 20) | public function dispatch(SqlWalker $walker
Condensed preview — 1645 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,980K chars).
[
  {
    "path": ".doctrine-project.json",
    "chars": 1521,
    "preview": "{\n    \"active\": true,\n    \"name\": \"Object Relational Mapper\",\n    \"shortName\": \"ORM\",\n    \"slug\": \"orm\",\n    \"docsSlug\":"
  },
  {
    "path": ".gitattributes",
    "chars": 572,
    "preview": "/.github export-ignore\n/ci export-ignore\n/docs export-ignore\n/tests export-ignore\n/tools export-ignore\n.doctrine-project"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/Failing_Test.md",
    "chars": 350,
    "preview": "---\nname: 🐞 Failing Test\nabout: You found a bug and have a failing Unit or Functional test? 🔨\n---\n\n### Failing Test\n\n<!-"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/Improvement.md",
    "chars": 372,
    "preview": "---\nname: ⚙ Improvement\nabout: You have some improvement to make Doctrine better? 🎁\n---\n\n### Improvement\n\n<!-- Fill in t"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/New_Feature.md",
    "chars": 712,
    "preview": "---\nname: 🎉 New Feature\nabout: You have implemented some neat idea that you want to make part of Doctrine? 🎩\n---\n\n<!--\nT"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 171,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  "
  },
  {
    "path": ".github/workflows/coding-standards.yml",
    "chars": 506,
    "preview": "name: \"Coding Standards\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - .github/workflows/coding-st"
  },
  {
    "path": ".github/workflows/composer-lint.yml",
    "chars": 391,
    "preview": "name: \"Composer Lint\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - \".github/workflows/composer-li"
  },
  {
    "path": ".github/workflows/continuous-integration.yml",
    "chars": 14230,
    "preview": "name: \"CI: PHPUnit\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - .github/workflows/continuous-int"
  },
  {
    "path": ".github/workflows/documentation.yml",
    "chars": 379,
    "preview": "name: \"Documentation\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - \".github/workflows/documentati"
  },
  {
    "path": ".github/workflows/phpbench.yml",
    "chars": 1038,
    "preview": "\nname: \"Performance benchmark\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - .github/workflows/php"
  },
  {
    "path": ".github/workflows/release-on-milestone-closed.yml",
    "chars": 432,
    "preview": "name: \"Automatic Releases\"\n\non:\n  milestone:\n    types:\n      - \"closed\"\n\njobs:\n  release:\n    uses: \"doctrine/.github/."
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 701,
    "preview": "name: 'Close stale pull requests'\non:\n  schedule:\n    - cron: '0 3 * * *'\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n   "
  },
  {
    "path": ".github/workflows/static-analysis.yml",
    "chars": 1333,
    "preview": "name: \"Static Analysis\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - .github/workflows/static-ana"
  },
  {
    "path": ".github/workflows/website-schema.yml",
    "chars": 431,
    "preview": "\nname: \"Website config validation\"\n\non:\n  pull_request:\n    branches:\n      - \"*.x\"\n    paths:\n      - \".doctrine-projec"
  },
  {
    "path": ".gitignore",
    "chars": 209,
    "preview": "build/\nlogs/\nreports/\ndist/\ndownload/\n/.settings/\n.buildpath\n.project\n.idea\n*.iml\nvendor/\n/tests/Doctrine/Performance/hi"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2519,
    "preview": "# Contribute to Doctrine\n\nThank you for contributing to Doctrine!\n\nBefore we can merge your Pull-Request here are some g"
  },
  {
    "path": "LICENSE",
    "chars": 1055,
    "preview": "Copyright (c) Doctrine Project\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis sof"
  },
  {
    "path": "README.md",
    "chars": 4021,
    "preview": "|                      [4.0.x][4.0]                      |                      [3.7.x][3.7]                      |     "
  },
  {
    "path": "SECURITY.md",
    "chars": 785,
    "preview": "Security\n========\n\nThe Doctrine library is operating very close to your database and as such needs\nto handle and make as"
  },
  {
    "path": "UPGRADE.md",
    "chars": 107895,
    "preview": "Note about upgrading: Doctrine uses static and runtime mechanisms to raise\nawareness about deprecated code.\n\n- Use of `@"
  },
  {
    "path": "ci/github/phpunit/mysqli.xml",
    "chars": 1762,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "ci/github/phpunit/pdo_mysql.xml",
    "chars": 1765,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "ci/github/phpunit/pdo_pgsql.xml",
    "chars": 1554,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "ci/github/phpunit/pdo_sqlite.xml",
    "chars": 1445,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "ci/github/phpunit/pgsql.xml",
    "chars": 1550,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "ci/github/phpunit/sqlite3.xml",
    "chars": 1442,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "composer.json",
    "chars": 2712,
    "preview": "{\n    \"name\": \"doctrine/orm\",\n    \"description\": \"Object-Relational-Mapper for PHP\",\n    \"license\": \"MIT\",\n    \"type\": \""
  },
  {
    "path": "docs/.gitignore",
    "chars": 30,
    "preview": "composer.lock\nvendor/\noutput/\n"
  },
  {
    "path": "docs/LICENSE.md",
    "chars": 22435,
    "preview": "The Doctrine ORM documentation is licensed under [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/dee"
  },
  {
    "path": "docs/README.md",
    "chars": 458,
    "preview": "# Doctrine ORM Documentation\n\nThe documentation is written in [ReStructured Text](https://docutils.sourceforge.io/rst.ht"
  },
  {
    "path": "docs/composer.json",
    "chars": 220,
    "preview": "{\n    \"name\": \"doctrine/orm-docs\",\n    \"description\": \"Documentation for the Object-Relational Mapper\\\"\",\n    \"type\": \"l"
  },
  {
    "path": "docs/en/cookbook/advanced-field-value-conversion-using-custom-mapping-types.rst",
    "chars": 6556,
    "preview": "Advanced field value conversion using custom mapping types\n==========================================================\n\n."
  },
  {
    "path": "docs/en/cookbook/aggregate-fields.rst",
    "chars": 11220,
    "preview": "Aggregate Fields\n================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nYou will often come across"
  },
  {
    "path": "docs/en/cookbook/custom-mapping-types.rst",
    "chars": 3117,
    "preview": "Custom Mapping Types\n====================\n\nDoctrine allows you to create new mapping types. This can come in\nhandy when "
  },
  {
    "path": "docs/en/cookbook/decorator-pattern.rst",
    "chars": 6247,
    "preview": "Persisting the Decorator Pattern\n================================\n\n.. sectionauthor:: Chris Woodford <chris.woodford@gma"
  },
  {
    "path": "docs/en/cookbook/dql-custom-walkers/InterpolateParametersSQLOutputWalker.php",
    "chars": 2041,
    "preview": "<?php\nuse Doctrine\\DBAL\\ArrayParameterType;\nuse Doctrine\\DBAL\\ParameterType;\nuse Doctrine\\DBAL\\Types\\BooleanType;\nuse Do"
  },
  {
    "path": "docs/en/cookbook/dql-custom-walkers.rst",
    "chars": 10092,
    "preview": "Extending DQL in Doctrine ORM: Custom AST Walkers\n===============================================\n\n.. sectionauthor:: Be"
  },
  {
    "path": "docs/en/cookbook/dql-user-defined-functions.rst",
    "chars": 10331,
    "preview": "DQL User Defined Functions\n==========================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nBy def"
  },
  {
    "path": "docs/en/cookbook/entities-in-session.rst",
    "chars": 2936,
    "preview": "Entities in the Session\n=======================\n\nThere are several use-cases to save entities in the session, for exampl"
  },
  {
    "path": "docs/en/cookbook/generated-columns/Article.php",
    "chars": 747,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Doctrine\\ORM\\Mapping as ORM;\n\n#[ORM\\Entity]\nclass Article\n{\n    #[ORM\\Id]\n    #[ORM"
  },
  {
    "path": "docs/en/cookbook/generated-columns/Person.php",
    "chars": 512,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse Doctrine\\ORM\\Mapping as ORM;\n\n#[ORM\\Entity]\nclass Person\n{\n    #[ORM\\Column(type: '"
  },
  {
    "path": "docs/en/cookbook/generated-columns.rst",
    "chars": 1894,
    "preview": "Generated Columns\n=================\n\nGenerated columns, sometimes also called virtual columns, are populated by\nthe data"
  },
  {
    "path": "docs/en/cookbook/implementing-arrayaccess-for-domain-objects.rst",
    "chars": 3136,
    "preview": "Implementing ArrayAccess for Domain Objects\n===========================================\n\n.. sectionauthor:: Roman Borsch"
  },
  {
    "path": "docs/en/cookbook/mysql-enums.rst",
    "chars": 5787,
    "preview": "Mysql Enums\n===========\n\nThe type system of Doctrine ORM consists of flyweights, which means there is only\none instance "
  },
  {
    "path": "docs/en/cookbook/resolve-target-entity-listener.rst",
    "chars": 4441,
    "preview": "Keeping your Modules independent\n=================================\n\nOne of the goals of using modules is to create discr"
  },
  {
    "path": "docs/en/cookbook/sql-table-prefixes.rst",
    "chars": 2832,
    "preview": "SQL-Table Prefixes\n==================\n\nThis recipe is intended as an example of implementing a\nloadClassMetadata listene"
  },
  {
    "path": "docs/en/cookbook/strategy-cookbook-introduction.rst",
    "chars": 8735,
    "preview": "Strategy-Pattern\n================\n\nThis recipe will give you a short introduction on how to design\nsimilar entities with"
  },
  {
    "path": "docs/en/cookbook/validation-of-entities.rst",
    "chars": 4374,
    "preview": "Validation of Entities\n======================\n\n.. sectionauthor:: Benjamin Eberlei <kontakt@beberlei.de>\n\nDoctrine ORM d"
  },
  {
    "path": "docs/en/cookbook/working-with-datetime.rst",
    "chars": 6714,
    "preview": "Working with DateTime Instances\n===============================\n\nThere are many nitty gritty details when working with P"
  },
  {
    "path": "docs/en/index.rst",
    "chars": 4719,
    "preview": "Welcome to Doctrine ORM's documentation!\n==========================================\n\nThe Doctrine documentation is compr"
  },
  {
    "path": "docs/en/reference/advanced-configuration.rst",
    "chars": 19197,
    "preview": "Advanced Configuration\n======================\n\nThe configuration of the EntityManager requires a\n``Doctrine\\ORM\\Configur"
  },
  {
    "path": "docs/en/reference/architecture.rst",
    "chars": 8247,
    "preview": "Architecture\n============\n\nThis chapter gives an overview of the overall architecture,\nterminology and constraints of Do"
  },
  {
    "path": "docs/en/reference/association-mapping.rst",
    "chars": 30629,
    "preview": "Association Mapping\n===================\n\nThis chapter explains mapping associations between objects.\n\nInstead of working"
  },
  {
    "path": "docs/en/reference/attributes-reference.rst",
    "chars": 34450,
    "preview": "Attributes Reference\n====================\n\nPHP 8 adds native support for metadata with its \"Attributes\" feature.\nDoctrin"
  },
  {
    "path": "docs/en/reference/basic-mapping/DefaultValues.php",
    "chars": 439,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Entity;\n\nuse DateTime;\nuse Doctrine\\DBAL\\Schema\\DefaultExpression\\Current"
  },
  {
    "path": "docs/en/reference/basic-mapping/default-values.xml",
    "chars": 448,
    "preview": "<doctrine-mapping>\n  <entity name=\"Message\">\n    <field name=\"text\">\n      <options>\n        <option name=\"default\">Hell"
  },
  {
    "path": "docs/en/reference/basic-mapping.rst",
    "chars": 20212,
    "preview": "Basic Mapping\n=============\n\nThis guide explains the basic mapping of entities and properties.\nAfter working through thi"
  },
  {
    "path": "docs/en/reference/batch-processing.rst",
    "chars": 5957,
    "preview": "Batch Processing\n================\n\nThis chapter shows you how to accomplish bulk inserts, updates and\ndeletes with Doctr"
  },
  {
    "path": "docs/en/reference/best-practices.rst",
    "chars": 3793,
    "preview": "Best Practices\n==============\n\nThe best practices mentioned here that affect database\ndesign generally refer to best pra"
  },
  {
    "path": "docs/en/reference/caching.rst",
    "chars": 5972,
    "preview": "Caching\n=======\n\nThe Doctrine ORM package can leverage cache adapters implementing the PSR-6\nstandard to allow you to im"
  },
  {
    "path": "docs/en/reference/change-tracking-policies.rst",
    "chars": 2209,
    "preview": "Change Tracking Policies\n========================\n\nChange tracking is the process of determining what has changed in\nman"
  },
  {
    "path": "docs/en/reference/configuration.rst",
    "chars": 3479,
    "preview": "Installation and Configuration\n==============================\n\nDoctrine can be installed with `Composer <https://getcomp"
  },
  {
    "path": "docs/en/reference/dql-doctrine-query-language.rst",
    "chars": 66774,
    "preview": "Doctrine Query Language\n=======================\n\nDQL stands for Doctrine Query Language and is an Object\nQuery Language "
  },
  {
    "path": "docs/en/reference/events.rst",
    "chars": 38696,
    "preview": "Events\n======\n\nDoctrine ORM features a lightweight event system that is part of the\nCommon package. Doctrine uses it to "
  },
  {
    "path": "docs/en/reference/faq.rst",
    "chars": 9483,
    "preview": "Frequently Asked Questions\n==========================\n\n.. note::\n\n    This FAQ is a work in progress. We will add lots o"
  },
  {
    "path": "docs/en/reference/filters.rst",
    "chars": 5116,
    "preview": "Filters\n=======\n\nDoctrine ORM features a filter system that allows the developer to add SQL to\nthe conditional clauses o"
  },
  {
    "path": "docs/en/reference/improving-performance.rst",
    "chars": 3312,
    "preview": "Improving Performance\n=====================\n\nBytecode Cache\n--------------\n\nIt is highly recommended to make use of a by"
  },
  {
    "path": "docs/en/reference/inheritance-mapping.rst",
    "chars": 21576,
    "preview": "Inheritance Mapping\n===================\n\nThis chapter explains the available options for mapping class\nhierarchies.\n\nMap"
  },
  {
    "path": "docs/en/reference/installation.rst",
    "chars": 141,
    "preview": ":orphan:\n\nInstallation\n============\n\nThe installation chapter has moved to :doc:`Installation and Configuration </refere"
  },
  {
    "path": "docs/en/reference/limitations-and-known-issues.rst",
    "chars": 9846,
    "preview": "Limitations and Known Issues\n============================\n\nWe try to make using Doctrine ORM a very pleasant experience."
  },
  {
    "path": "docs/en/reference/metadata-drivers.rst",
    "chars": 5842,
    "preview": "Metadata Drivers\n================\n\nThe heart of an object relational mapper is the mapping information\nthat glues everyt"
  },
  {
    "path": "docs/en/reference/namingstrategy.rst",
    "chars": 4565,
    "preview": "Implementing a NamingStrategy\n==============================\n\nUsing a naming strategy you can provide rules for generati"
  },
  {
    "path": "docs/en/reference/native-sql.rst",
    "chars": 17893,
    "preview": "Native SQL\n==========\n\nWith ``NativeQuery`` you can execute native SELECT SQL statements\nand map the results to Doctrine"
  },
  {
    "path": "docs/en/reference/partial-hydration.rst",
    "chars": 633,
    "preview": "Partial Hydration\n=================\n\nPartial hydration of entities is allowed in the array hydrator, when\nonly a subset "
  },
  {
    "path": "docs/en/reference/partial-objects.rst",
    "chars": 3600,
    "preview": "Partial Objects\n===============\n\nA partial object is an object whose state is not fully initialized\nafter being reconsti"
  },
  {
    "path": "docs/en/reference/php-mapping.rst",
    "chars": 7168,
    "preview": "PHP Mapping\n===========\n\nDoctrine ORM also allows you to provide the ORM metadata in the form of plain\nPHP code using th"
  },
  {
    "path": "docs/en/reference/query-builder.rst",
    "chars": 22752,
    "preview": "The QueryBuilder\n================\n\nA ``QueryBuilder`` provides an API that is designed for\nconditionally constructing a "
  },
  {
    "path": "docs/en/reference/second-level-cache.rst",
    "chars": 23157,
    "preview": "The Second Level Cache\n======================\n\n.. note::\n\n    The second level cache functionality is marked as experime"
  },
  {
    "path": "docs/en/reference/security.rst",
    "chars": 4800,
    "preview": "Security\n========\n\nThe Doctrine library is operating very close to your database and as such needs\nto handle and make as"
  },
  {
    "path": "docs/en/reference/tools.rst",
    "chars": 10065,
    "preview": "Tools\n=====\n\nDoctrine Console\n----------------\n\nThe Doctrine Console is a Command Line Interface tool for simplifying co"
  },
  {
    "path": "docs/en/reference/transactions-and-concurrency.rst",
    "chars": 14151,
    "preview": "Transactions and Concurrency\n============================\n\n.. _transactions-and-concurrency_transaction-demarcation:\n\nTr"
  },
  {
    "path": "docs/en/reference/typedfieldmapper.rst",
    "chars": 5221,
    "preview": "Implementing a TypedFieldMapper\n===============================\n\n.. versionadded:: 2.14\n\nYou can specify custom typed fi"
  },
  {
    "path": "docs/en/reference/unitofwork-associations.rst",
    "chars": 2808,
    "preview": "Association Updates: Owning Side and Inverse Side\n=================================================\n\nWhen mapping bidire"
  },
  {
    "path": "docs/en/reference/unitofwork.rst",
    "chars": 6848,
    "preview": "Doctrine Internals explained\n============================\n\nObject relational mapping is a complex topic and sufficiently"
  },
  {
    "path": "docs/en/reference/working-with-associations.rst",
    "chars": 25613,
    "preview": "Working with Associations\n=========================\n\nAssociations between entities are represented just like in regular\n"
  },
  {
    "path": "docs/en/reference/working-with-objects.rst",
    "chars": 30992,
    "preview": "Working with Objects\n====================\n\nIn this chapter we will help you understand the ``EntityManager``\nand the ``U"
  },
  {
    "path": "docs/en/reference/xml-mapping.rst",
    "chars": 28058,
    "preview": "XML Mapping\n===========\n\nThe XML mapping driver enables you to provide the ORM metadata in\nform of XML documents. It req"
  },
  {
    "path": "docs/en/sidebar.rst",
    "chars": 2048,
    "preview": ":orphan:\n\n.. toctree::\n   :caption: Tutorials\n   :depth: 3\n\n   tutorials/getting-started\n   tutorials/working-with-index"
  },
  {
    "path": "docs/en/tutorials/composite-primary-keys.rst",
    "chars": 9795,
    "preview": "Composite and Foreign Keys as Primary Key\n=========================================\n\nDoctrine ORM supports composite pri"
  },
  {
    "path": "docs/en/tutorials/embeddables.rst",
    "chars": 3898,
    "preview": "Separating Concerns using Embeddables\n=====================================\n\nEmbeddables are classes which are not entit"
  },
  {
    "path": "docs/en/tutorials/extra-lazy-associations.rst",
    "chars": 3530,
    "preview": "Extra Lazy Associations\n=======================\n\n.. versionadded:: 2.1\n\nIn many cases associations between entities can "
  },
  {
    "path": "docs/en/tutorials/getting-started.rst",
    "chars": 55280,
    "preview": "Getting Started with Doctrine\n=============================\n\nThis guide covers getting started with the Doctrine ORM. Af"
  },
  {
    "path": "docs/en/tutorials/ordered-associations.rst",
    "chars": 2746,
    "preview": "Ordering To-Many Associations\n-----------------------------\n\nThere are use-cases when you'll want to sort collections wh"
  },
  {
    "path": "docs/en/tutorials/override-field-association-mappings-in-subclasses.rst",
    "chars": 2470,
    "preview": "Override Field Association Mappings In Subclasses\n-------------------------------------------------\n\nSometimes there is "
  },
  {
    "path": "docs/en/tutorials/pagination.rst",
    "chars": 2338,
    "preview": "Pagination\n==========\n\nDoctrine ORM ships with a Paginator for DQL queries. It\nhas a very simple API and implements the "
  },
  {
    "path": "docs/en/tutorials/working-with-indexed-associations/Market.php",
    "chars": 1574,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\Tests\\Models\\StockExchange;\n\nuse Doctrine\\Common\\Collections\\ArrayCo"
  },
  {
    "path": "docs/en/tutorials/working-with-indexed-associations/market.xml",
    "chars": 638,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doctrine-mapping xmlns=\"http://doctrine-project.org/schemas/orm/doctrine-mapping"
  },
  {
    "path": "docs/en/tutorials/working-with-indexed-associations.rst",
    "chars": 6563,
    "preview": "Working with Indexed Associations\n=================================\n\nDoctrine ORM collections are modelled after PHPs na"
  },
  {
    "path": "doctrine-mapping.xsd",
    "chars": 27160,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n    targetNamespace=\"http"
  },
  {
    "path": "phpbench.json",
    "chars": 225,
    "preview": "{\n    \"runner.bootstrap\": \"tests/Tests/TestInit.php\",\n    \"runner.path\": \"tests/Performance\",\n    \"runner.file_pattern\":"
  },
  {
    "path": "phpcs.xml.dist",
    "chars": 14597,
    "preview": "<?xml version=\"1.0\"?>\n<ruleset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         name=\"PHP_CodeSniffer\"\n   "
  },
  {
    "path": "phpstan-baseline.neon",
    "chars": 186348,
    "preview": "parameters:\n\tignoreErrors:\n\t\t-\n\t\t\tmessage: '#^Method Doctrine\\\\ORM\\\\AbstractQuery\\:\\:getParameter\\(\\) should return Doct"
  },
  {
    "path": "phpstan-dbal3.neon",
    "chars": 5822,
    "preview": "includes:\n    - phpstan-baseline.neon\n    - phpstan-params.neon\n\nparameters:\n    reportUnmatchedIgnoredErrors: false # S"
  },
  {
    "path": "phpstan-params.neon",
    "chars": 264,
    "preview": "parameters:\n    level: 7\n    paths:\n        - src\n        - tests/StaticAnalysis\n    excludePaths:\n        - src/Mapping"
  },
  {
    "path": "phpstan.neon",
    "chars": 2793,
    "preview": "includes:\n    - phpstan-baseline.neon\n    - phpstan-params.neon\n\nparameters:\n    ignoreErrors:\n        # Symfony cache s"
  },
  {
    "path": "phpunit.xml.dist",
    "chars": 3502,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Use this configuration file as a template to run the tests against any d"
  },
  {
    "path": "src/AbstractQuery.php",
    "chars": 32081,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BackedEnum;\nuse Doctrine\\Common\\Collections\\ArrayCollectio"
  },
  {
    "path": "src/Cache/AssociationCacheEntry.php",
    "chars": 764,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nclass AssociationCacheEntry implements CacheEntry\n{\n    "
  },
  {
    "path": "src/Cache/CacheConfiguration.php",
    "chars": 1526,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Logging\\CacheLogger;\n\n/**\n * Conf"
  },
  {
    "path": "src/Cache/CacheEntry.php",
    "chars": 236,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache entry interface\n *\n * <b>IMPORTANT NOTE:</b"
  },
  {
    "path": "src/Cache/CacheException.php",
    "chars": 669,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Exception\\ORMException;\nuse LogicExcept"
  },
  {
    "path": "src/Cache/CacheFactory.php",
    "chars": 1993,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
  },
  {
    "path": "src/Cache/CacheKey.php",
    "chars": 315,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines entity / collection / query key to be sto"
  },
  {
    "path": "src/Cache/CollectionCacheEntry.php",
    "chars": 654,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nclass CollectionCacheEntry implements CacheEntry\n{\n    /"
  },
  {
    "path": "src/Cache/CollectionCacheKey.php",
    "chars": 1108,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function implode;\nuse function ksort;\nuse function s"
  },
  {
    "path": "src/Cache/CollectionHydrator.php",
    "chars": 667,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\Collection;\nuse Doctrine"
  },
  {
    "path": "src/Cache/ConcurrentRegion.php",
    "chars": 1200,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines contract for concurrently managed data re"
  },
  {
    "path": "src/Cache/DefaultCache.php",
    "chars": 7894,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
  },
  {
    "path": "src/Cache/DefaultCacheFactory.php",
    "chars": 7180,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\nuse Doctrine\\ORM\\Cache\\Persister"
  },
  {
    "path": "src/Cache/DefaultCollectionHydrator.php",
    "chars": 2266,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\Collection;\nuse Doctrine"
  },
  {
    "path": "src/Cache/DefaultEntityHydrator.php",
    "chars": 6542,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
  },
  {
    "path": "src/Cache/DefaultQueryCache.php",
    "chars": 14973,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\Common\\Collections\\ArrayCollection;\nuse Doc"
  },
  {
    "path": "src/Cache/EntityCacheEntry.php",
    "chars": 1273,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\n\nuse function a"
  },
  {
    "path": "src/Cache/EntityCacheKey.php",
    "chars": 929,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function implode;\nuse function ksort;\nuse function s"
  },
  {
    "path": "src/Cache/EntityHydrator.php",
    "chars": 958,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Mapping\\ClassMetadata;\n\n/**\n * Hydrator"
  },
  {
    "path": "src/Cache/Exception/CacheException.php",
    "chars": 220,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse Doctrine\\ORM\\Cache\\CacheException as BaseC"
  },
  {
    "path": "src/Cache/Exception/CannotUpdateReadOnlyCollection.php",
    "chars": 421,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass CannotUpdateReadO"
  },
  {
    "path": "src/Cache/Exception/CannotUpdateReadOnlyEntity.php",
    "chars": 320,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass CannotUpdateReadO"
  },
  {
    "path": "src/Cache/Exception/FeatureNotImplemented.php",
    "chars": 727,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nclass FeatureNotImplemented extends CacheExcep"
  },
  {
    "path": "src/Cache/Exception/NonCacheableEntity.php",
    "chars": 372,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass NonCacheableEntit"
  },
  {
    "path": "src/Cache/Exception/NonCacheableEntityAssociation.php",
    "chars": 447,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Exception;\n\nuse function sprintf;\n\nclass NonCacheableEntit"
  },
  {
    "path": "src/Cache/Lock.php",
    "chars": 409,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function time;\nuse function uniqid;\n\nclass Lock\n{\n  "
  },
  {
    "path": "src/Cache/LockException.php",
    "chars": 198,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Exception\\CacheException;\n\n/**\n *"
  },
  {
    "path": "src/Cache/Logging/CacheLogger.php",
    "chars": 1719,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
  },
  {
    "path": "src/Cache/Logging/CacheLoggerChain.php",
    "chars": 2591,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
  },
  {
    "path": "src/Cache/Logging/StatisticsCacheLogger.php",
    "chars": 4775,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Logging;\n\nuse Doctrine\\ORM\\Cache\\CollectionCacheKey;\nuse D"
  },
  {
    "path": "src/Cache/Persister/CachedPersister.php",
    "chars": 580,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister;\n\nuse Doctrine\\ORM\\Cache\\Region;\n\n/**\n * Interfa"
  },
  {
    "path": "src/Cache/Persister/Collection/AbstractCollectionPersister.php",
    "chars": 6139,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\Common\\Collections\\Col"
  },
  {
    "path": "src/Cache/Persister/Collection/CachedCollectionPersister.php",
    "chars": 1046,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\Common\\Collections\\Col"
  },
  {
    "path": "src/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php",
    "chars": 2298,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\CollectionCa"
  },
  {
    "path": "src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php",
    "chars": 749,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\Exception\\Ca"
  },
  {
    "path": "src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php",
    "chars": 3074,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Collection;\n\nuse Doctrine\\ORM\\Cache\\CollectionCa"
  },
  {
    "path": "src/Cache/Persister/Entity/AbstractEntityPersister.php",
    "chars": 18415,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\Common\\Collections\\Criteri"
  },
  {
    "path": "src/Cache/Persister/Entity/CachedEntityPersister.php",
    "chars": 541,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\EntityCacheKey;\n"
  },
  {
    "path": "src/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php",
    "chars": 2350,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\EntityCacheKey;\n"
  },
  {
    "path": "src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php",
    "chars": 504,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\Exception\\Cannot"
  },
  {
    "path": "src/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php",
    "chars": 2783,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Persister\\Entity;\n\nuse Doctrine\\ORM\\Cache\\ConcurrentRegion"
  },
  {
    "path": "src/Cache/QueryCache.php",
    "chars": 692,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Query\\ResultSetMapping;\n\n/**\n * Defines"
  },
  {
    "path": "src/Cache/QueryCacheEntry.php",
    "chars": 650,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass QueryCacheEntry implement"
  },
  {
    "path": "src/Cache/QueryCacheKey.php",
    "chars": 516,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache;\n\n/**\n * A cache key that identif"
  },
  {
    "path": "src/Cache/QueryCacheValidator.php",
    "chars": 279,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache query validator interface.\n */\ninterface Qu"
  },
  {
    "path": "src/Cache/Region/DefaultRegion.php",
    "chars": 3036,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheEntry;\nuse Doctrine\\O"
  },
  {
    "path": "src/Cache/Region/FileLockRegion.php",
    "chars": 4826,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheEntry;\nuse Doctrine\\O"
  },
  {
    "path": "src/Cache/Region/UpdateTimestampCache.php",
    "chars": 462,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache\\Region;\n\nuse Doctrine\\ORM\\Cache\\CacheKey;\nuse Doctrine\\ORM"
  },
  {
    "path": "src/Cache/Region.php",
    "chars": 2097,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse Doctrine\\ORM\\Cache\\Exception\\CacheException;\n\n/**\n *"
  },
  {
    "path": "src/Cache/RegionsConfiguration.php",
    "chars": 1453,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Cache regions configuration\n */\nclass RegionsConf"
  },
  {
    "path": "src/Cache/TimestampCacheEntry.php",
    "chars": 642,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass TimestampCacheEntry imple"
  },
  {
    "path": "src/Cache/TimestampCacheKey.php",
    "chars": 307,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * A key that identifies a timestamped space.\n */\ncl"
  },
  {
    "path": "src/Cache/TimestampQueryCacheValidator.php",
    "chars": 879,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\nuse function microtime;\n\nclass TimestampQueryCacheValida"
  },
  {
    "path": "src/Cache/TimestampRegion.php",
    "chars": 424,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Cache;\n\n/**\n * Defines the contract for a cache region which wil"
  },
  {
    "path": "src/Cache.php",
    "chars": 3131,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\ORM\\Cache\\QueryCache;\nuse Doctrine\\ORM\\Cache\\Regi"
  },
  {
    "path": "src/Configuration.php",
    "chars": 23531,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Doctrine\\Dep"
  },
  {
    "path": "src/Decorator/EntityManagerDecorator.php",
    "chars": 4469,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Decorator;\n\nuse DateTimeInterface;\nuse Doctrine\\Common\\EventMana"
  },
  {
    "path": "src/EntityManager.php",
    "chars": 18938,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BackedEnum;\nuse DateTimeInterface;\nuse Doctrine\\Common\\Eve"
  },
  {
    "path": "src/EntityManagerInterface.php",
    "chars": 7611,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse DateTimeInterface;\nuse Doctrine\\Common\\EventManager;\nuse D"
  },
  {
    "path": "src/EntityNotFoundException.php",
    "chars": 1090,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse Doctrine\\ORM\\Exception\\ORMException;\nuse RuntimeException;"
  },
  {
    "path": "src/EntityRepository.php",
    "chars": 7719,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\nuse BadMethodCallException;\nuse Doctrine\\Common\\Collections\\Ab"
  },
  {
    "path": "src/Event/ListenersInvoker.php",
    "chars": 3037,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\Common\\EventArgs;\nuse Doctrine\\Common\\Event"
  },
  {
    "path": "src/Event/LoadClassMetadataEventArgs.php",
    "chars": 653,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
  },
  {
    "path": "src/Event/OnClassMetadataNotFoundEventArgs.php",
    "chars": 1345,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/OnClearEventArgs.php",
    "chars": 398,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/OnFlushEventArgs.php",
    "chars": 367,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PostFlushEventArgs.php",
    "chars": 370,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PostLoadEventArgs.php",
    "chars": 277,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PostPersistEventArgs.php",
    "chars": 280,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PostRemoveEventArgs.php",
    "chars": 279,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PostUpdateEventArgs.php",
    "chars": 279,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PreFlushEventArgs.php",
    "chars": 368,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PrePersistEventArgs.php",
    "chars": 279,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PreRemoveEventArgs.php",
    "chars": 278,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\Pe"
  },
  {
    "path": "src/Event/PreUpdateEventArgs.php",
    "chars": 2545,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Event;\n\nuse Doctrine\\ORM\\EntityManagerInterface;\nuse Doctrine\\OR"
  },
  {
    "path": "src/Events.php",
    "chars": 4019,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM;\n\n/**\n * Container for all ORM events.\n *\n * This class cannot b"
  },
  {
    "path": "src/Exception/ConfigurationException.php",
    "chars": 126,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\ninterface ConfigurationException extends ORMExceptio"
  },
  {
    "path": "src/Exception/DuplicateFieldException.php",
    "chars": 377,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nclass Du"
  },
  {
    "path": "src/Exception/EntityIdentityCollisionException.php",
    "chars": 1229,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Exception;\n\nuse function sprintf;\n\nfinal class E"
  },
  {
    "path": "src/Exception/EntityManagerClosed.php",
    "chars": 291,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse RuntimeException;\n\nfinal class EntityManagerClos"
  },
  {
    "path": "src/Exception/EntityMissingAssignedId.php",
    "chars": 712,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function get_debug_type;\n\nf"
  },
  {
    "path": "src/Exception/InvalidEntityRepository.php",
    "chars": 443,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Doctrine\\ORM\\EntityRepository;\nuse LogicExceptio"
  },
  {
    "path": "src/Exception/InvalidHydrationMode.php",
    "chars": 347,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nfinal cl"
  },
  {
    "path": "src/Exception/ManagerException.php",
    "chars": 133,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface ManagerException extends T"
  },
  {
    "path": "src/Exception/MissingIdentifierField.php",
    "chars": 458,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nfinal cl"
  },
  {
    "path": "src/Exception/MissingMappingDriverImplementation.php",
    "chars": 431,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nfinal class MissingMappingDrive"
  },
  {
    "path": "src/Exception/MultipleSelectorsFoundException.php",
    "chars": 622,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function implode;\nuse funct"
  },
  {
    "path": "src/Exception/NoMatchingPropertyException.php",
    "chars": 424,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\nclass No"
  },
  {
    "path": "src/Exception/NotSupported.php",
    "chars": 1148,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse LogicException;\n\nuse function sprintf;\n\n/** @dep"
  },
  {
    "path": "src/Exception/ORMException.php",
    "chars": 129,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface ORMException extends Throw"
  },
  {
    "path": "src/Exception/PersisterException.php",
    "chars": 203,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Doctrine\\ORM\\Persisters\\PersisterException as Ba"
  },
  {
    "path": "src/Exception/RepositoryException.php",
    "chars": 221,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\n/**\n * This interface should be implemented by all e"
  },
  {
    "path": "src/Exception/SchemaToolException.php",
    "chars": 136,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Doctrine\\ORM\\Exception;\n\nuse Throwable;\n\ninterface SchemaToolException extend"
  }
]

// ... and 1445 more files (download for full content)

About this extraction

This page contains the full source code of the doctrine/orm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1645 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 10195 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!