1
0
mirror of synced 2025-02-22 15:13:13 +03:00

#1130 DDC-3300 - optimizing performance (looping over existing classes first): throwing exceptions if the class is not found in the discriminator map

This commit is contained in:
Marco Pivetta 2015-01-15 03:37:50 +01:00
parent 8579baf28c
commit a36bea2951

View File

@ -308,21 +308,37 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory
* *
* @param ClassMetadata $metadata * @param ClassMetadata $metadata
* *
* @return void
*
* @throws MappingException * @throws MappingException
*/ */
private function populateDiscriminatorValue(ClassMetadata $metadata) private function populateDiscriminatorValue(ClassMetadata $metadata)
{ {
if (! $metadata->discriminatorValue && $metadata->discriminatorMap) { if ($metadata->discriminatorValue
|| ! $metadata->discriminatorMap
|| $metadata->isMappedSuperclass
|| $metadata->reflClass->isAbstract()
) {
return;
}
foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) {
if ($discriminatorClass === $metadata->name) {
$metadata->discriminatorValue = $discriminatorValue;
return;
}
}
foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) {
if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) { if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) {
$metadata->discriminatorValue = $discriminatorValue; $metadata->discriminatorValue = $discriminatorValue;
break; return;
} }
} }
//throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->name, $metadata->rootEntityName); throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->name, $metadata->rootEntityName);
}
} }
/** /**