From 27adf8d6e9723c86e3725de18b5e1a955996cc11 Mon Sep 17 00:00:00 2001 From: Adrien Crivelli Date: Mon, 21 Jul 2014 17:42:49 +0900 Subject: [PATCH] Refactor partial into options array This coherent with what is done for Table. All platform specific things are grouped into an options array. Eventually flags should be migrated into options as well. --- doctrine-mapping.xsd | 4 ++-- lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php | 10 +++++----- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 9 +++++---- lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php | 8 ++++---- lib/Doctrine/ORM/Mapping/Index.php | 4 ++-- lib/Doctrine/ORM/Mapping/UniqueConstraint.php | 4 ++-- lib/Doctrine/ORM/Tools/SchemaTool.php | 4 ++-- .../Tests/ORM/Mapping/AbstractMappingDriverTest.php | 12 ++++++------ .../php/Doctrine.Tests.ORM.Mapping.Comment.php | 2 +- .../Mapping/php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- .../xml/Doctrine.Tests.ORM.Mapping.Comment.dcm.xml | 6 +++++- .../xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml | 6 +++++- .../yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml | 3 ++- .../yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml | 3 ++- 14 files changed, 44 insertions(+), 33 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index 2dca26257..a6440a2e8 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -320,11 +320,11 @@ + - @@ -338,12 +338,12 @@ + - diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 89d215a3a..d68204058 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -107,8 +107,8 @@ class AnnotationDriver extends AbstractAnnotationDriver $index['flags'] = $indexAnnot->flags; } - if (! empty($indexAnnot->where)) { - $index['where'] = $indexAnnot->where; + if (! empty($indexAnnot->options)) { + $index['options'] = $indexAnnot->options; } if ( ! empty($indexAnnot->name)) { @@ -122,9 +122,9 @@ class AnnotationDriver extends AbstractAnnotationDriver if ($tableAnnot->uniqueConstraints !== null) { foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { $uniqueConstraint = array('columns' => $uniqueConstraintAnnot->columns); - - if ( ! empty($uniqueConstraintAnnot->where)) { - $uniqueConstraint['where'] = $uniqueConstraintAnnot->where; + + if ( ! empty($uniqueConstraintAnnot->options)) { + $uniqueConstraint['options'] = $uniqueConstraintAnnot->options; } if ( ! empty($uniqueConstraintAnnot->name)) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index a07f5b36b..45836a6b9 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -201,8 +201,8 @@ class XmlDriver extends FileDriver $index['flags'] = explode(',', (string) $indexXml['flags']); } - if (isset($indexXml['where'])) { - $index['where'] = $indexXml['where']; + if (isset($indexXml->options)) { + $index['options'] = $this->_parseOptions($indexXml->options->children()); } if (isset($indexXml['name'])) { @@ -219,8 +219,9 @@ class XmlDriver extends FileDriver foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { $unique = array('columns' => explode(',', (string) $uniqueXml['columns'])); - if (isset($uniqueXml['where'])) { - $unique['where'] = $uniqueXml['where']; + + if (isset($uniqueXml->options)) { + $unique['options'] = $this->_parseOptions($uniqueXml->options->children()); } if (isset($uniqueXml['name'])) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 6146667a0..c492c0f54 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -220,8 +220,8 @@ class YamlDriver extends FileDriver } } - if (isset($indexYml['where'])) { - $index['where'] = $indexYml['where']; + if (isset($indexYml['options'])) { + $index['options'] = $indexYml['options']; } $metadata->table['indexes'][$indexYml['name']] = $index; @@ -241,8 +241,8 @@ class YamlDriver extends FileDriver $unique = array('columns' => $uniqueYml['columns']); } - if (isset($uniqueYml['where'])) { - $unique['where'] = $uniqueYml['where']; + if (isset($uniqueYml['options'])) { + $unique['options'] = $uniqueYml['options']; } $metadata->table['uniqueConstraints'][$uniqueYml['name']] = $unique; diff --git a/lib/Doctrine/ORM/Mapping/Index.php b/lib/Doctrine/ORM/Mapping/Index.php index 378dd4d67..45953a804 100644 --- a/lib/Doctrine/ORM/Mapping/Index.php +++ b/lib/Doctrine/ORM/Mapping/Index.php @@ -41,7 +41,7 @@ final class Index implements Annotation public $flags; /** - * @var string + * @var array */ - public $where; + public $options; } diff --git a/lib/Doctrine/ORM/Mapping/UniqueConstraint.php b/lib/Doctrine/ORM/Mapping/UniqueConstraint.php index 364cb547c..f117d1873 100644 --- a/lib/Doctrine/ORM/Mapping/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Mapping/UniqueConstraint.php @@ -36,7 +36,7 @@ final class UniqueConstraint implements Annotation public $columns; /** - * @var string + * @var array */ - public $where; + public $options; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 8792c5257..db9438c9f 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -268,13 +268,13 @@ class SchemaTool $indexData['flags'] = array(); } - $table->addIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, (array)$indexData['flags'], isset($indexData['where']) ? $indexData['where'] : null); + $table->addIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, (array)$indexData['flags'], isset($indexData['options']) ? $indexData['options'] : array()); } } if (isset($class->table['uniqueConstraints'])) { foreach ($class->table['uniqueConstraints'] as $indexName => $indexData) { - $table->addUniqueIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, isset($indexData['where']) ? $indexData['where'] : null); + $table->addUniqueIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, isset($indexData['options']) ? $indexData['options'] : array()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 704fa1804..b81b3ba1e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -81,7 +81,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase 0 => array( 'columns' => array('content'), 'flags' => array('fulltext'), - 'where' => 'content IS NOT NULL', + 'options' => array('where' => 'content IS NOT NULL'), ) ), $class->table['indexes']); } @@ -96,7 +96,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase 'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.'); $this->assertEquals(array( - "search_idx" => array("columns" => array("name", "user_email"), 'where' => 'name IS NOT NULL') + "search_idx" => array("columns" => array("name", "user_email"), 'options' => array('where' => 'name IS NOT NULL')) ), $class->table['uniqueConstraints']); return $class; @@ -939,7 +939,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase * @HasLifecycleCallbacks * @Table( * name="cms_users", - * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"}, where="name IS NOT NULL")}, + * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"}, options={"where": "name IS NOT NULL"})}, * indexes={@Index(name="name_idx", columns={"name"}), @Index(name="0", columns={"user_email"})}, * options={"foo": "bar", "baz": {"key": "val"}} * ) @@ -1123,7 +1123,7 @@ class User 'orderBy' => NULL, )); $metadata->table['uniqueConstraints'] = array( - 'search_idx' => array('columns' => array('name', 'user_email'), 'where' => 'name IS NOT NULL'), + 'search_idx' => array('columns' => array('name', 'user_email'), 'options'=> array('where' => 'name IS NOT NULL')), ); $metadata->table['indexes'] = array( 'name_idx' => array('columns' => array('name')), 0 => array('columns' => array('user_email')) @@ -1282,7 +1282,7 @@ class Group {} /** * @Entity - * @Table(indexes={@Index(columns={"content"}, flags={"fulltext"}, where="content IS NOT NULL")}) + * @Table(indexes={@Index(columns={"content"}, flags={"fulltext"}, options={"where": "content IS NOT NULL"})}) */ class Comment { @@ -1296,7 +1296,7 @@ class Comment $metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable(array( 'indexes' => array( - array('columns' => array('content'), 'flags' => array('fulltext'), 'where' => 'content IS NOT NULL') + array('columns' => array('content'), 'flags' => array('fulltext'), 'options' => array('where' => 'content IS NOT NULL')) ) )); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index e5ac0f8b0..85cbed4dc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -5,7 +5,7 @@ use Doctrine\ORM\Mapping\ClassMetadataInfo; $metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable(array( 'indexes' => array( - array('columns' => array('content'), 'flags' => array('fulltext'), 'where' => 'content IS NOT NULL') + array('columns' => array('content'), 'flags' => array('fulltext'), 'options'=> array('where' => 'content IS NOT NULL')) ) )); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 2e32ee229..67dbd752d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -116,7 +116,7 @@ $metadata->table['options'] = array( 'baz' => array('key' => 'val') ); $metadata->table['uniqueConstraints'] = array( - 'search_idx' => array('columns' => array('name', 'user_email'), 'where' => 'name IS NOT NULL'), + 'search_idx' => array('columns' => array('name', 'user_email'), 'options' => array('where' => 'name IS NOT NULL')), ); $metadata->table['indexes'] = array( 'name_idx' => array('columns' => array('name')), 0 => array('columns' => array('user_email')) diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Comment.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Comment.dcm.xml index 5c061a94a..8f02ca852 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Comment.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.Comment.dcm.xml @@ -8,7 +8,11 @@ - + + + + + diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml index c61962539..28b1e0571 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml @@ -19,7 +19,11 @@ - + + + + + diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml index e9e46dece..f37bfdcc6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml @@ -7,4 +7,5 @@ Doctrine\Tests\ORM\Mapping\Comment: 0: columns: content flags: fulltext - where: "content IS NOT NULL" + options: + where: "content IS NOT NULL" diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml index db93190b6..457b24eea 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml @@ -74,7 +74,8 @@ Doctrine\Tests\ORM\Mapping\User: uniqueConstraints: search_idx: columns: name,user_email - where: name IS NOT NULL + options: + where: name IS NOT NULL indexes: name_idx: columns: name