Skip to content

Commit

Permalink
Merge pull request #282 from FabioBatSilva/discriminatorColumnName
Browse files Browse the repository at this point in the history
Mandatory discriminator column name
  • Loading branch information
Guilherme Blanco committed Feb 14, 2012
2 parents e5d1f9e + da9b2e8 commit 2c3c5b3
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
9 changes: 6 additions & 3 deletions lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
Expand Up @@ -1937,19 +1937,22 @@ public function setLifecycleCallbacks(array $callbacks)
public function setDiscriminatorColumn($columnDef)
{
if ($columnDef !== null) {
if ( ! isset($columnDef['name'])) {
throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name);
}

if (isset($this->fieldNames[$columnDef['name']])) {
throw MappingException::duplicateColumnName($this->name, $columnDef['name']);
}

if ( ! isset($columnDef['name'])) {
throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name, $columnDef);
}
if ( ! isset($columnDef['fieldName'])) {
$columnDef['fieldName'] = $columnDef['name'];
}

if ( ! isset($columnDef['type'])) {
$columnDef['type'] = "string";
}

if (in_array($columnDef['type'], array("boolean", "array", "object", "datetime", "time", "date"))) {
throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']);
}
Expand Down
5 changes: 5 additions & 0 deletions lib/Doctrine/ORM/Mapping/MappingException.php
Expand Up @@ -226,6 +226,11 @@ public static function invalidDiscriminatorColumnType($className, $type)
return new self("Discriminator column type on entity class '$className' is not allowed to be '$type'. 'string' or 'integer' type variables are suggested!");
}

public static function nameIsMandatoryForDiscriminatorColumns($className)
{
return new self("Discriminator column name on entity class '$className' is not defined.");
}

public static function cannotVersionIdField($className, $fieldName)
{
return new self("Setting Id field '$fieldName' as versionale in entity class '$className' is not supported.");
Expand Down
11 changes: 11 additions & 0 deletions tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php
Expand Up @@ -596,6 +596,17 @@ public function testTargetEntityNotFound()
$cm->validateAssocations();
}

/**
* @expectedException \Doctrine\ORM\Mapping\MappingException
* @expectedExceptionMessage Discriminator column name on entity class 'Doctrine\Tests\Models\CMS\CmsUser' is not defined.
*/
public function testNameIsMandatoryForDiscriminatorColumnsMappingException()
{
$cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
$cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$cm->setDiscriminatorColumn(array());
}

/**
* @group DDC-984
* @group DDC-559
Expand Down

0 comments on commit 2c3c5b3

Please sign in to comment.