From 7c2da2d5b84b655b78e521b3f1be94e8c48968c7 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 26 Apr 2013 16:11:04 -0300 Subject: [PATCH] Fix DDC-2415 --- .../ORM/Mapping/ClassMetadataFactory.php | 4 + .../ORM/Functional/Ticket/DDC2415Test.php | 106 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index a1da3ffcf..9320d1b6d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -103,6 +103,10 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); + if ( ! empty($parent->customGeneratorDefinition)) { + $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); + } + if ($parent->isMappedSuperclass) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php new file mode 100644 index 000000000..a440007a0 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -0,0 +1,106 @@ +_em->getConfiguration()->setMetadataDriverImpl(new StaticPHPDriver(array())); + + $this->_schemaTool->createSchema(array( + $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2415ParentEntity'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2415ChildEntity'), + )); + } + + public function testTicket() + { + $parentMetadata = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2415ParentEntity'); + $childMetadata = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2415ChildEntity'); + + $this->assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); + $this->assertEquals($parentMetadata->customGeneratorDefinition, $childMetadata->customGeneratorDefinition); + $this->assertEquals('Doctrine\Tests\ORM\Functional\Ticket\DDC2415Generator', $parentMetadata->customGeneratorDefinition['class']); + + $e1 = new DDC2415ChildEntity("ChildEntity 1"); + $e2 = new DDC2415ChildEntity("ChildEntity 2"); + + $this->_em->persist($e1); + $this->_em->persist($e2); + $this->_em->flush(); + $this->_em->clear(); + + $this->assertEquals(md5($e1->getName()), $e1->getId()); + $this->assertEquals(md5($e2->getName()), $e2->getId()); + } +} + +class DDC2415ParentEntity +{ + protected $id; + + public function getId() + { + return $this->id; + } + + public static function loadMetadata(ClassMetadataInfo $metadata) + { + $metadata->mapField(array ( + 'id' => true, + 'fieldName' => 'id', + 'type' => 'string', + )); + + $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); + $metadata->setCustomGeneratorDefinition(array( + 'class' => 'Doctrine\Tests\ORM\Functional\Ticket\DDC2415Generator' + )); + + $metadata->isMappedSuperclass = true; + } +} + +class DDC2415ChildEntity extends DDC2415ParentEntity +{ + protected $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } + + public static function loadMetadata(ClassMetadataInfo $metadata) + { + $metadata->mapField(array ( + 'fieldName' => 'name', + 'type' => 'string', + )); + } +} + +class DDC2415Generator extends AbstractIdGenerator +{ + public function generate(EntityManager $em, $entity) + { + return md5($entity->getName()); + } +} \ No newline at end of file