From 0f0d8abd6786da4af17474535995f445a5fb9d96 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sun, 8 Sep 2013 15:59:39 +0200 Subject: [PATCH] [DDC-2608][DDC-2662] Fix SequenceGenerator requiring "sequenceName" and now throw exception. Fix a bug in quoting the sequenceName. --- .../ORM/Mapping/ClassMetadataInfo.php | 8 ++++-- lib/Doctrine/ORM/Mapping/MappingException.php | 12 +++++++++ .../Tests/ORM/Mapping/ClassMetadataTest.php | 27 ++++++++++++++++++- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 3d42b24e6..9b3b29492 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -2790,8 +2790,12 @@ class ClassMetadataInfo implements ClassMetadata */ public function setSequenceGeneratorDefinition(array $definition) { - if (isset($definition['name']) && $definition['name'] == '`') { - $definition['name'] = trim($definition['name'], '`'); + if ( ! isset($definition['sequenceName'])) { + throw MappingException::missingSequenceName($this->name); + } + + if ($definition['sequenceName'][0] == '`') { + $definition['sequenceName'] = trim($definition['sequenceName'], '`'); $definition['quoted'] = true; } diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index a9d5d1214..987e60917 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -757,4 +757,16 @@ class MappingException extends \Doctrine\ORM\ORMException $cascades )); } + + /** + * @param string $className + * + * @return MappingException + */ + public static function missingSequenceName($className) + { + return new self( + sprintf('Missing "sequenceName" attribute for sequence id generator definition on class "%s".', $className) + ); + } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 4aaa2b9e4..67bf4c905 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1066,6 +1066,31 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals(array('customtypeparent_source' => 'id'), $cm->associationMappings['friendsWithMe']['relationToSourceKeyColumns']); $this->assertEquals(array('customtypeparent_target' => 'id'), $cm->associationMappings['friendsWithMe']['relationToTargetKeyColumns']); } + + /** + * @group DDC-2608 + */ + public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing() + { + $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'); + $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService); + + $this->setExpectedException('Doctrine\ORM\Mapping\MappingException'); + $cm->setSequenceGeneratorDefinition(array()); + } + + /** + * @group DDC-2662 + */ + public function testQuotedSequenceName() + { + $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'); + $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService); + + $cm->setSequenceGeneratorDefinition(array('sequenceName' => '`foo`')); + + $this->assertEquals(array('sequenceName' => 'foo', 'quoted' => true), $cm->sequenceGeneratorDefinition); + } } class MyNamespacedNamingStrategy extends \Doctrine\ORM\Mapping\DefaultNamingStrategy @@ -1092,4 +1117,4 @@ class MyPrefixNamingStrategy extends \Doctrine\ORM\Mapping\DefaultNamingStrategy { return strtolower($this->classToTableName($className)) . '_' . $propertyName; } -} \ No newline at end of file +}