PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / doctrine / orm / src / EntityManager.php
mailpoet / vendor-prefixed / doctrine / orm / src Last commit date
Cache 9 months ago Decorator 9 months ago Event 9 months ago Exception 9 months ago Id 9 months ago Internal 9 months ago Mapping 9 months ago Persisters 8 months ago Proxy 9 months ago Query 9 months ago Repository 9 months ago Tools 9 months ago Utility 9 months ago AbstractQuery.php 9 months ago Cache.php 9 months ago Configuration.php 9 months ago EntityManager.php 9 months ago EntityManagerInterface.php 9 months ago EntityNotFoundException.php 9 months ago EntityRepository.php 9 months ago Events.php 9 months ago LazyCriteriaCollection.php 9 months ago NativeQuery.php 9 months ago NoResultException.php 9 months ago NonUniqueResultException.php 9 months ago ORMException.php 9 months ago ORMInvalidArgumentException.php 9 months ago ORMSetup.php 9 months ago OptimisticLockException.php 9 months ago PersistentCollection.php 9 months ago PessimisticLockException.php 9 months ago Query.php 9 months ago QueryBuilder.php 9 months ago TransactionRequiredException.php 9 months ago UnexpectedResultException.php 9 months ago UnitOfWork.php 9 months ago Version.php 9 months ago index.php 9 months ago
EntityManager.php
526 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM;
4 if (!defined('ABSPATH')) exit;
5 use BackedEnum;
6 use BadMethodCallException;
7 use MailPoetVendor\Doctrine\Common\Cache\Psr6\CacheAdapter;
8 use MailPoetVendor\Doctrine\Common\EventManager;
9 use MailPoetVendor\Doctrine\Common\Persistence\PersistentObject;
10 use MailPoetVendor\Doctrine\DBAL\Connection;
11 use MailPoetVendor\Doctrine\DBAL\DriverManager;
12 use MailPoetVendor\Doctrine\DBAL\LockMode;
13 use MailPoetVendor\Doctrine\Deprecations\Deprecation;
14 use MailPoetVendor\Doctrine\ORM\Exception\EntityManagerClosed;
15 use MailPoetVendor\Doctrine\ORM\Exception\InvalidHydrationMode;
16 use MailPoetVendor\Doctrine\ORM\Exception\MismatchedEventManager;
17 use MailPoetVendor\Doctrine\ORM\Exception\MissingIdentifierField;
18 use MailPoetVendor\Doctrine\ORM\Exception\MissingMappingDriverImplementation;
19 use MailPoetVendor\Doctrine\ORM\Exception\NotSupported;
20 use MailPoetVendor\Doctrine\ORM\Exception\ORMException;
21 use MailPoetVendor\Doctrine\ORM\Exception\UnrecognizedIdentifierFields;
22 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata;
23 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataFactory;
24 use MailPoetVendor\Doctrine\ORM\Proxy\DefaultProxyClassNameResolver;
25 use MailPoetVendor\Doctrine\ORM\Proxy\ProxyFactory;
26 use MailPoetVendor\Doctrine\ORM\Query\Expr;
27 use MailPoetVendor\Doctrine\ORM\Query\FilterCollection;
28 use MailPoetVendor\Doctrine\ORM\Query\ResultSetMapping;
29 use MailPoetVendor\Doctrine\ORM\Repository\RepositoryFactory;
30 use MailPoetVendor\Doctrine\Persistence\Mapping\MappingException;
31 use InvalidArgumentException;
32 use function array_keys;
33 use function class_exists;
34 use function get_debug_type;
35 use function gettype;
36 use function is_array;
37 use function is_callable;
38 use function is_object;
39 use function is_string;
40 use function ltrim;
41 use function sprintf;
42 use function strpos;
43 class EntityManager implements EntityManagerInterface
44 {
45 private $config;
46 private $conn;
47 private $metadataFactory;
48 private $unitOfWork;
49 private $eventManager;
50 private $proxyFactory;
51 private $repositoryFactory;
52 private $expressionBuilder;
53 private $closed = \false;
54 private $filterCollection;
55 private $cache;
56 public function __construct(Connection $conn, Configuration $config, ?EventManager $eventManager = null)
57 {
58 if (!$config->getMetadataDriverImpl()) {
59 throw MissingMappingDriverImplementation::create();
60 }
61 $this->conn = $conn;
62 $this->config = $config;
63 // @phpstan-ignore method.deprecated
64 $this->eventManager = $eventManager ?? $conn->getEventManager();
65 $metadataFactoryClassName = $config->getClassMetadataFactoryName();
66 $this->metadataFactory = new $metadataFactoryClassName();
67 $this->metadataFactory->setEntityManager($this);
68 $this->configureMetadataCache();
69 $this->repositoryFactory = $config->getRepositoryFactory();
70 $this->unitOfWork = new UnitOfWork($this);
71 $this->proxyFactory = new ProxyFactory($this, $config->getProxyDir(), $config->getProxyNamespace(), $config->getAutoGenerateProxyClasses());
72 if ($config->isSecondLevelCacheEnabled()) {
73 $cacheConfig = $config->getSecondLevelCacheConfiguration();
74 $cacheFactory = $cacheConfig->getCacheFactory();
75 $this->cache = $cacheFactory->createCache($this);
76 }
77 }
78 public function getConnection()
79 {
80 return $this->conn;
81 }
82 public function getMetadataFactory()
83 {
84 return $this->metadataFactory;
85 }
86 public function getExpressionBuilder()
87 {
88 if ($this->expressionBuilder === null) {
89 $this->expressionBuilder = new Query\Expr();
90 }
91 return $this->expressionBuilder;
92 }
93 public function beginTransaction()
94 {
95 $this->conn->beginTransaction();
96 }
97 public function getCache()
98 {
99 return $this->cache;
100 }
101 public function transactional($func)
102 {
103 if (!is_callable($func)) {
104 throw new InvalidArgumentException('Expected argument of type "callable", got "' . gettype($func) . '"');
105 }
106 $this->conn->beginTransaction();
107 $successful = \false;
108 try {
109 $return = $func($this);
110 $this->flush();
111 $this->conn->commit();
112 $successful = \true;
113 return $return ?: \true;
114 } finally {
115 if (!$successful) {
116 $this->close();
117 if ($this->conn->isTransactionActive()) {
118 $this->conn->rollBack();
119 }
120 }
121 }
122 }
123 public function wrapInTransaction(callable $func)
124 {
125 $this->conn->beginTransaction();
126 $successful = \false;
127 try {
128 $return = $func($this);
129 $this->flush();
130 $this->conn->commit();
131 $successful = \true;
132 return $return;
133 } finally {
134 if (!$successful) {
135 $this->close();
136 if ($this->conn->isTransactionActive()) {
137 $this->conn->rollBack();
138 }
139 }
140 }
141 }
142 public function commit()
143 {
144 $this->conn->commit();
145 }
146 public function rollback()
147 {
148 $this->conn->rollBack();
149 }
150 public function getClassMetadata($className)
151 {
152 return $this->metadataFactory->getMetadataFor($className);
153 }
154 public function createQuery($dql = '')
155 {
156 $query = new Query($this);
157 if (!empty($dql)) {
158 $query->setDQL($dql);
159 }
160 return $query;
161 }
162 public function createNamedQuery($name)
163 {
164 return $this->createQuery($this->config->getNamedQuery($name));
165 }
166 public function createNativeQuery($sql, ResultSetMapping $rsm)
167 {
168 $query = new NativeQuery($this);
169 $query->setSQL($sql);
170 $query->setResultSetMapping($rsm);
171 return $query;
172 }
173 public function createNamedNativeQuery($name)
174 {
175 [$sql, $rsm] = $this->config->getNamedNativeQuery($name);
176 return $this->createNativeQuery($sql, $rsm);
177 }
178 public function createQueryBuilder()
179 {
180 return new QueryBuilder($this);
181 }
182 public function flush($entity = null)
183 {
184 if ($entity !== null) {
185 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8459', 'Calling %s() with any arguments to flush specific entities is deprecated and will not be supported in Doctrine ORM 3.0.', __METHOD__);
186 }
187 $this->errorIfClosed();
188 $this->unitOfWork->commit($entity);
189 }
190 public function find($className, $id, $lockMode = null, $lockVersion = null)
191 {
192 $class = $this->metadataFactory->getMetadataFor(ltrim($className, '\\'));
193 if ($lockMode !== null) {
194 $this->checkLockRequirements($lockMode, $class);
195 }
196 if (!is_array($id)) {
197 if ($class->isIdentifierComposite) {
198 throw ORMInvalidArgumentException::invalidCompositeIdentifier();
199 }
200 $id = [$class->identifier[0] => $id];
201 }
202 foreach ($id as $i => $value) {
203 if (is_object($value)) {
204 $className = DefaultProxyClassNameResolver::getClass($value);
205 if ($this->metadataFactory->hasMetadataFor($className)) {
206 $id[$i] = $this->unitOfWork->getSingleIdentifierValue($value);
207 if ($id[$i] === null) {
208 throw ORMInvalidArgumentException::invalidIdentifierBindingEntity($className);
209 }
210 }
211 }
212 }
213 $sortedId = [];
214 foreach ($class->identifier as $identifier) {
215 if (!isset($id[$identifier])) {
216 throw MissingIdentifierField::fromFieldAndClass($identifier, $class->name);
217 }
218 if ($id[$identifier] instanceof BackedEnum) {
219 $sortedId[$identifier] = $id[$identifier]->value;
220 } else {
221 $sortedId[$identifier] = $id[$identifier];
222 }
223 unset($id[$identifier]);
224 }
225 if ($id) {
226 throw UnrecognizedIdentifierFields::fromClassAndFieldNames($class->name, array_keys($id));
227 }
228 $unitOfWork = $this->getUnitOfWork();
229 $entity = $unitOfWork->tryGetById($sortedId, $class->rootEntityName);
230 // Check identity map first
231 if ($entity !== \false) {
232 if (!$entity instanceof $class->name) {
233 return null;
234 }
235 switch (\true) {
236 case $lockMode === LockMode::OPTIMISTIC:
237 $this->lock($entity, $lockMode, $lockVersion);
238 break;
239 case $lockMode === LockMode::NONE:
240 case $lockMode === LockMode::PESSIMISTIC_READ:
241 case $lockMode === LockMode::PESSIMISTIC_WRITE:
242 $persister = $unitOfWork->getEntityPersister($class->name);
243 $persister->refresh($sortedId, $entity, $lockMode);
244 break;
245 }
246 return $entity;
247 // Hit!
248 }
249 $persister = $unitOfWork->getEntityPersister($class->name);
250 switch (\true) {
251 case $lockMode === LockMode::OPTIMISTIC:
252 $entity = $persister->load($sortedId);
253 if ($entity !== null) {
254 $unitOfWork->lock($entity, $lockMode, $lockVersion);
255 }
256 return $entity;
257 case $lockMode === LockMode::PESSIMISTIC_READ:
258 case $lockMode === LockMode::PESSIMISTIC_WRITE:
259 return $persister->load($sortedId, null, null, [], $lockMode);
260 default:
261 return $persister->loadById($sortedId);
262 }
263 }
264 public function getReference($entityName, $id)
265 {
266 $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\'));
267 if (!is_array($id)) {
268 $id = [$class->identifier[0] => $id];
269 }
270 $sortedId = [];
271 foreach ($class->identifier as $identifier) {
272 if (!isset($id[$identifier])) {
273 throw MissingIdentifierField::fromFieldAndClass($identifier, $class->name);
274 }
275 $sortedId[$identifier] = $id[$identifier];
276 unset($id[$identifier]);
277 }
278 if ($id) {
279 throw UnrecognizedIdentifierFields::fromClassAndFieldNames($class->name, array_keys($id));
280 }
281 $entity = $this->unitOfWork->tryGetById($sortedId, $class->rootEntityName);
282 // Check identity map first, if its already in there just return it.
283 if ($entity !== \false) {
284 return $entity instanceof $class->name ? $entity : null;
285 }
286 if ($class->subClasses) {
287 return $this->find($entityName, $sortedId);
288 }
289 $entity = $this->proxyFactory->getProxy($class->name, $sortedId);
290 $this->unitOfWork->registerManaged($entity, $sortedId, []);
291 return $entity;
292 }
293 public function getPartialReference($entityName, $identifier)
294 {
295 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/10987', 'Method %s is deprecated and will be removed in 3.0.', __METHOD__);
296 $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\'));
297 $entity = $this->unitOfWork->tryGetById($identifier, $class->rootEntityName);
298 // Check identity map first, if its already in there just return it.
299 if ($entity !== \false) {
300 return $entity instanceof $class->name ? $entity : null;
301 }
302 if (!is_array($identifier)) {
303 $identifier = [$class->identifier[0] => $identifier];
304 }
305 $entity = $class->newInstance();
306 $class->setIdentifierValues($entity, $identifier);
307 $this->unitOfWork->registerManaged($entity, $identifier, []);
308 $this->unitOfWork->markReadOnly($entity);
309 return $entity;
310 }
311 public function clear($entityName = null)
312 {
313 if ($entityName !== null && !is_string($entityName)) {
314 // @phpstan-ignore staticMethod.deprecated
315 throw ORMInvalidArgumentException::invalidEntityName($entityName);
316 }
317 if ($entityName !== null) {
318 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8460', 'Calling %s() with any arguments to clear specific entities is deprecated and will not be supported in Doctrine ORM 3.0.', __METHOD__);
319 }
320 $this->unitOfWork->clear($entityName === null ? null : $this->metadataFactory->getMetadataFor($entityName)->getName());
321 }
322 public function close()
323 {
324 $this->clear();
325 $this->closed = \true;
326 }
327 public function persist($entity)
328 {
329 if (!is_object($entity)) {
330 throw ORMInvalidArgumentException::invalidObject('EntityManager#persist()', $entity);
331 }
332 $this->errorIfClosed();
333 $this->unitOfWork->persist($entity);
334 }
335 public function remove($entity)
336 {
337 if (!is_object($entity)) {
338 throw ORMInvalidArgumentException::invalidObject('EntityManager#remove()', $entity);
339 }
340 $this->errorIfClosed();
341 $this->unitOfWork->remove($entity);
342 }
343 public function refresh($entity, ?int $lockMode = null)
344 {
345 if (!is_object($entity)) {
346 throw ORMInvalidArgumentException::invalidObject('EntityManager#refresh()', $entity);
347 }
348 $this->errorIfClosed();
349 $this->unitOfWork->refresh($entity, $lockMode);
350 }
351 public function detach($entity)
352 {
353 if (!is_object($entity)) {
354 throw ORMInvalidArgumentException::invalidObject('EntityManager#detach()', $entity);
355 }
356 $this->unitOfWork->detach($entity);
357 }
358 public function merge($entity)
359 {
360 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8461', 'Method %s() is deprecated and will be removed in Doctrine ORM 3.0.', __METHOD__);
361 if (!is_object($entity)) {
362 throw ORMInvalidArgumentException::invalidObject('EntityManager#merge()', $entity);
363 }
364 $this->errorIfClosed();
365 return $this->unitOfWork->merge($entity);
366 }
367 public function copy($entity, $deep = \false)
368 {
369 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8462', 'Method %s() is deprecated and will be removed in Doctrine ORM 3.0.', __METHOD__);
370 throw new BadMethodCallException('Not implemented.');
371 }
372 public function lock($entity, $lockMode, $lockVersion = null)
373 {
374 $this->unitOfWork->lock($entity, $lockMode, $lockVersion);
375 }
376 public function getRepository($entityName)
377 {
378 if (strpos($entityName, ':') !== \false) {
379 if (class_exists(PersistentObject::class)) {
380 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8818', 'Short namespace aliases such as "%s" are deprecated and will be removed in Doctrine ORM 3.0.', $entityName);
381 } else {
382 throw NotSupported::createForPersistence3(sprintf('Using short namespace alias "%s" when calling %s', $entityName, __METHOD__));
383 }
384 }
385 $repository = $this->repositoryFactory->getRepository($this, $entityName);
386 if (!$repository instanceof EntityRepository) {
387 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9533', 'Not returning an instance of %s from %s::getRepository() is deprecated and will cause a TypeError on 3.0.', EntityRepository::class, get_debug_type($this->repositoryFactory));
388 }
389 return $repository;
390 }
391 public function contains($entity)
392 {
393 return $this->unitOfWork->isScheduledForInsert($entity) || $this->unitOfWork->isInIdentityMap($entity) && !$this->unitOfWork->isScheduledForDelete($entity);
394 }
395 public function getEventManager()
396 {
397 return $this->eventManager;
398 }
399 public function getConfiguration()
400 {
401 return $this->config;
402 }
403 private function errorIfClosed() : void
404 {
405 if ($this->closed) {
406 throw EntityManagerClosed::create();
407 }
408 }
409 public function isOpen()
410 {
411 return !$this->closed;
412 }
413 public function getUnitOfWork()
414 {
415 return $this->unitOfWork;
416 }
417 public function getHydrator($hydrationMode)
418 {
419 return $this->newHydrator($hydrationMode);
420 }
421 public function newHydrator($hydrationMode)
422 {
423 switch ($hydrationMode) {
424 case Query::HYDRATE_OBJECT:
425 return new Internal\Hydration\ObjectHydrator($this);
426 case Query::HYDRATE_ARRAY:
427 return new Internal\Hydration\ArrayHydrator($this);
428 case Query::HYDRATE_SCALAR:
429 return new Internal\Hydration\ScalarHydrator($this);
430 case Query::HYDRATE_SINGLE_SCALAR:
431 return new Internal\Hydration\SingleScalarHydrator($this);
432 case Query::HYDRATE_SIMPLEOBJECT:
433 return new Internal\Hydration\SimpleObjectHydrator($this);
434 case Query::HYDRATE_SCALAR_COLUMN:
435 return new Internal\Hydration\ScalarColumnHydrator($this);
436 default:
437 $class = $this->config->getCustomHydrationMode($hydrationMode);
438 if ($class !== null) {
439 return new $class($this);
440 }
441 }
442 throw InvalidHydrationMode::fromMode((string) $hydrationMode);
443 }
444 public function getProxyFactory()
445 {
446 return $this->proxyFactory;
447 }
448 public function initializeObject($obj)
449 {
450 $this->unitOfWork->initializeObject($obj);
451 }
452 public function isUninitializedObject($obj) : bool
453 {
454 return $this->unitOfWork->isUninitializedObject($obj);
455 }
456 public static function create($connection, Configuration $config, ?EventManager $eventManager = null)
457 {
458 Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9961', '%s() is deprecated. To bootstrap a DBAL connection, call %s::getConnection() instead. Use the constructor to create an instance of %s.', __METHOD__, DriverManager::class, self::class);
459 $connection = static::createConnection($connection, $config, $eventManager);
460 return new EntityManager($connection, $config);
461 }
462 protected static function createConnection($connection, Configuration $config, ?EventManager $eventManager = null)
463 {
464 Deprecation::triggerIfCalledFromOutside('doctrine/orm', 'https://github.com/doctrine/orm/pull/9961', '%s() is deprecated, call %s::getConnection() instead.', __METHOD__, DriverManager::class);
465 if (is_array($connection)) {
466 return DriverManager::getConnection($connection, $config, $eventManager ?: new EventManager());
467 }
468 if (!$connection instanceof Connection) {
469 throw new InvalidArgumentException(sprintf('Invalid $connection argument of type %s given%s.', get_debug_type($connection), is_object($connection) ? '' : ': "' . $connection . '"'));
470 }
471 if ($eventManager !== null && $connection->getEventManager() !== $eventManager) {
472 throw MismatchedEventManager::create();
473 }
474 return $connection;
475 }
476 public function getFilters()
477 {
478 if ($this->filterCollection === null) {
479 $this->filterCollection = new FilterCollection($this);
480 }
481 return $this->filterCollection;
482 }
483 public function isFiltersStateClean()
484 {
485 return $this->filterCollection === null || $this->filterCollection->isClean();
486 }
487 public function hasFilters()
488 {
489 return $this->filterCollection !== null;
490 }
491 private function checkLockRequirements(int $lockMode, ClassMetadata $class) : void
492 {
493 switch ($lockMode) {
494 case LockMode::OPTIMISTIC:
495 if (!$class->isVersioned) {
496 throw OptimisticLockException::notVersioned($class->name);
497 }
498 break;
499 case LockMode::PESSIMISTIC_READ:
500 case LockMode::PESSIMISTIC_WRITE:
501 if (!$this->getConnection()->isTransactionActive()) {
502 throw TransactionRequiredException::transactionRequired();
503 }
504 }
505 }
506 private function configureMetadataCache() : void
507 {
508 $metadataCache = $this->config->getMetadataCache();
509 if (!$metadataCache) {
510 $this->configureLegacyMetadataCache();
511 return;
512 }
513 $this->metadataFactory->setCache($metadataCache);
514 }
515 private function configureLegacyMetadataCache() : void
516 {
517 // @phpstan-ignore method.deprecated
518 $metadataCache = $this->config->getMetadataCacheImpl();
519 if (!$metadataCache) {
520 return;
521 }
522 // Wrap doctrine/cache to provide PSR-6 interface
523 $this->metadataFactory->setCache(CacheAdapter::wrap($metadataCache));
524 }
525 }
526