From 8f80c949230f84053432edc563f03ab7739532de Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Thu, 23 Sep 2010 23:10:31 +0200 Subject: [PATCH] DDC-514 - Implemented default for discriminator column --- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 + lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 + .../ORM/Mapping/Driver/YamlDriver.php | 2 + .../ORM/Mapping/AbstractMappingDriverTest.php | 66 +++++++++++++++++-- .../Doctrine.Tests.ORM.Mapping.Animal.dcm.xml | 12 ++++ .../Doctrine.Tests.ORM.Mapping.Animal.dcm.yml | 6 ++ 6 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml create mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e531a27f7..115d6dba9 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -179,6 +179,8 @@ class AnnotationDriver implements Driver 'type' => $discrColumnAnnot->type, 'length' => $discrColumnAnnot->length )); + } else { + $metadata->setDiscriminatorColumn(array('name' => 'dtype', 'type' => 'string', 'length' => 255)); } // Evaluate DiscriminatorMap annotation diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 7ffcd0001..91892e2b3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -87,6 +87,8 @@ class XmlDriver extends AbstractFileDriver 'type' => (string)$discrColumn['type'], 'length' => (string)$discrColumn['length'] )); + } else { + $metadata->setDiscriminatorColumn(array('name' => 'dtype', 'type' => 'string', 'length' => 255)); } // Evaluate diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 21130c349..e714c50a0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -79,6 +79,8 @@ class YamlDriver extends AbstractFileDriver 'type' => $discrColumn['type'], 'length' => $discrColumn['length'] )); + } else { + $metadata->setDiscriminatorColumn(array('name' => 'dtype', 'type' => 'string', 'length' => 255)); } // Evaluate discriminatorMap diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 12ccfb32f..8dd34a6c4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -13,17 +13,22 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase { abstract protected function _loadDriver(); - public function testLoadMapping() + public function createClassMetadata($entityClassName) { - $className = 'Doctrine\Tests\ORM\Mapping\User'; $mappingDriver = $this->_loadDriver(); - $class = new ClassMetadata($className); - $mappingDriver->loadMetadataForClass($className, $class); + $class = new ClassMetadata($entityClassName); + $mappingDriver->loadMetadataForClass($entityClassName, $class); return $class; } + public function testLoadMapping() + { + $entityClassName = 'Doctrine\Tests\ORM\Mapping\User'; + return $this->createClassMetadata($entityClassName); + } + /** * @depends testLoadMapping * @param ClassMetadata $class @@ -269,6 +274,23 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase return $class; } + + /** + * @group DDC-514 + */ + public function testDiscriminatorColumnDefaults() + { + if (strpos(get_class($this), 'PHPMappingDriver') !== false) { + $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); + } + + $class = $this->createClassMetadata('Doctrine\Tests\ORM\Mapping\Animal'); + + $this->assertEquals( + array('name' => 'dtype', 'type' => 'string', 'length' => 255, 'fieldName' => 'dtype'), + $class->discriminatorColumn + ); + } } /** @@ -459,3 +481,39 @@ class User )); } } + +/** + * @Entity + * @InheritanceType("SINGLE_TABLE") + * @DiscriminatorMap({"cat" = "Cat", "dog" = "Dog"}) + */ +abstract class Animal +{ + /** + * @Id @Column(type="string") @GeneratedValue + */ + public $id; + + public static function loadMetadata(ClassMetadataInfo $metadata) + { + + } +} + +/** @Entity */ +class Cat extends Animal +{ + public static function loadMetadata(ClassMetadataInfo $metadata) + { + + } +} + +/** @Entity */ +class Dog extends Animal +{ + public static function loadMetadata(ClassMetadataInfo $metadata) + { + + } +} \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml new file mode 100644 index 000000000..6c2a2356f --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Animal.dcm.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml new file mode 100644 index 000000000..cd6ec292c --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml @@ -0,0 +1,6 @@ +Doctrine\Tests\ORM\Mapping\Animal: + type: entity + inheritanceType: SINGLE_TABLE + discriminatorMap: + cat: Cat + dog: Dog \ No newline at end of file