From 909dbdf29d1153c3abe1f7962e36a89c6dc348a6 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Thu, 22 Dec 2011 12:07:18 -0200 Subject: [PATCH 01/11] default NamingStrategy --- lib/Doctrine/ORM/DefaultNamingStrategy.php | 113 ++++++++++++++++ lib/Doctrine/ORM/NamingStrategy.php | 121 ++++++++++++++++++ .../Doctrine/Tests/ORM/NamingStrategyTest.php | 20 +++ 3 files changed, 254 insertions(+) create mode 100644 lib/Doctrine/ORM/DefaultNamingStrategy.php create mode 100644 lib/Doctrine/ORM/NamingStrategy.php create mode 100644 tests/Doctrine/Tests/ORM/NamingStrategyTest.php diff --git a/lib/Doctrine/ORM/DefaultNamingStrategy.php b/lib/Doctrine/ORM/DefaultNamingStrategy.php new file mode 100644 index 000000000..7e712a3bb --- /dev/null +++ b/lib/Doctrine/ORM/DefaultNamingStrategy.php @@ -0,0 +1,113 @@ +. + */ + +namespace Doctrine\ORM; + +/** + * The default NamingStrategy + * + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.doctrine-project.org + * @since 2.3 + * @author Fabio B. Silva + */ +class DefaultNamingStrategy implements NamingStrategy +{ + + /** + * {@inheritdoc} + */ + public function classToTableName($className) + { + return $className; + } + + /** + * {@inheritdoc} + */ + public function propertyToColumnName($propertyName) + { + return $propertyName; + } + + /** + * {@inheritdoc} + */ + public function tableName($tableName) + { + return $tableName; + } + + /** + * {@inheritdoc} + */ + public function columnName($columnName) + { + return $columnName; + } + + /** + * {@inheritdoc} + */ + public function collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName) + { + return $propertyName; + } + + /** + * {@inheritdoc} + */ + public function joinKeyColumnName($joinedColumn, $joinedTable) + { + return $joinedColumn; + } + + /** + * {@inheritdoc} + */ + public function foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName) + { + return $propertyName ?: $propertyTableName; + } + + /** + * {@inheritdoc} + */ + public function logicalColumnName($columnName, $propertyName) + { + return $columnName ?: $propertyName; + } + + /** + * {@inheritdoc} + */ + public function logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName) + { + return $ownerEntityTable . '_' . ( $associatedEntityTable ?: $propertyName ); + } + + /** + * {@inheritdoc} + */ + public function logicalCollectionColumnName($columnName, $propertyName, $referencedColumn) + { + return $columnName ?: ($propertyName . '_' . $referencedColumn); + } +} diff --git a/lib/Doctrine/ORM/NamingStrategy.php b/lib/Doctrine/ORM/NamingStrategy.php new file mode 100644 index 000000000..ff72be46f --- /dev/null +++ b/lib/Doctrine/ORM/NamingStrategy.php @@ -0,0 +1,121 @@ +. + */ + +namespace Doctrine\ORM; + +/** + * A set of rules for determining the physical column and table names + * + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.doctrine-project.org + * @since 2.3 + * @author Fabio B. Silva + */ +interface NamingStrategy +{ + + /** + * Return a table name for an entity class + * + * @param string $className The fully-qualified class name + * @return string A table name + */ + function classToTableName($className); + + /** + * Return a column name for a property path expression + * + * @param string $propertyName A property path + * @return string A column name + */ + function propertyToColumnName($propertyName); + + /** + * Alter the table name given in the mapping document + * + * @param string tableName A table name + * @return string A table name + */ + function tableName($tableName); + + /** + * Alter the column name given in the mapping document + * + * @param string $columnName A column name + * @return string A column name + */ + function columnName($columnName); + + /** + * Return a collection table name ie an association having a join table + * + * @param string $ownerEntity + * @param string $ownerEntityTable Owner side table name + * @param string $associatedEntity + * @param string $associatedEntityTable Reverse side table name if any + * @param string $propertyName Collection role + */ + function collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName); + + /** + * Return the join key column name ie a FK column used in a JOINED strategy or for a secondary table + * + * @param string $joinedColumn Joined column name used to join with + * @param string $joinedTable Joined table name used to join with + */ + function joinKeyColumnName($joinedColumn, $joinedTable); + + /** + * Return the foreign key column name for the given parameters + * + * @param string $propertyName The property name involved + * @param string $propertyEntityName + * @param string $propertyTableName The property table name involved (logical one) + * @param string $referencedColumnName The referenced column name involved (logical one) + */ + function foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName); + + /** + * Return the logical column name used to refer to a column in the metadata + * + * @param string $columnName Given column name if any + * @param string $propertyName Property name of this column + */ + function logicalColumnName($columnName, $propertyName); + + /** + * Returns the logical collection table name used to refer to a table in the mapping metadata + * + * @param string $tableName The metadata explicit name + * @param string $ownerEntityTable Owner table entity table name (logical one) + * @param string $associatedEntityTable Reverse side table name if any (logical one) + * @param string $propertyName Collection role + */ + function logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName); + + /** + * Returns the logical foreign key column name used to refer to this column in the mapping metadata + * + * @param string $columnName Given column name in the metadata if any + * @param string $propertyName Property name + * @param string $referencedColumn Referenced column name in the join + */ + function logicalCollectionColumnName($columnName, $propertyName, $referencedColumn); +} diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php new file mode 100644 index 000000000..9bfa9afba --- /dev/null +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -0,0 +1,20 @@ +assertEquals('ShortClassName', $strategy->classToTableName('ShortClassName')); + } +} \ No newline at end of file From a038e6cbad59b034840aeaa5b380843da37c3582 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Thu, 22 Dec 2011 14:07:58 -0200 Subject: [PATCH 02/11] test case --- .../Doctrine/Tests/ORM/NamingStrategyTest.php | 388 +++++++++++++++++- 1 file changed, 384 insertions(+), 4 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php index 9bfa9afba..08b8c1b51 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM; use Doctrine\ORM\DefaultNamingStrategy; +use Doctrine\ORM\NamingStrategy; require_once __DIR__ . '/../TestInit.php'; @@ -11,10 +12,389 @@ require_once __DIR__ . '/../TestInit.php'; */ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase { - public function testDefaultNamingStrategy() + /** + * @var DefaultNamingStrategy + */ + private static $defaultNamingStrategy; + + /** + * @return DefaultNamingStrategy + */ + static private function defaultNaming() { - $strategy = new \Doctrine\ORM\DefaultNamingStrategy(); - - $this->assertEquals('ShortClassName', $strategy->classToTableName('ShortClassName')); + if (self::$defaultNamingStrategy == null) { + self::$defaultNamingStrategy = new DefaultNamingStrategy(); + } + return self::$defaultNamingStrategy; } + + /** + * Data Provider for NamingStrategy#classToTableName + * + * @return array + */ + static public function dataClassToTableName() + { + return array( + array(self::defaultNaming(), 'SomeClassName', + 'SomeClassName' + ), + array(self::defaultNaming(), 'SOME_CLASS_NAME', + 'SOME_CLASS_NAME' + ), + array(self::defaultNaming(), 'some_class_name', + 'some_class_name' + ), + ); + } + + /** + * @dataProvider dataClassToTableName + */ + public function testClassToTableName(NamingStrategy $strategy, $className, $expected) + { + $this->assertEquals($expected, $strategy->classToTableName($className)); + } + + /** + * Data Provider for NamingStrategy#propertyToColumnName + * + * @return array + */ + static public function dataPropertyToColumnName() + { + return array( + array(self::defaultNaming(), 'someProperty', + 'someProperty' + ), + array(self::defaultNaming(), 'SOME_PROPERTY', + 'SOME_PROPERTY' + ), + array(self::defaultNaming(), 'some_property', + 'some_property' + ), + ); + } + + /** + * @dataProvider dataPropertyToColumnName + * + * @param NamingStrategy $strategy + * @param string $expected + * @param string $propertyName + */ + public function testPropertyToColumnName(NamingStrategy $strategy, $expected, $propertyName) + { + $this->assertEquals($expected, $strategy->propertyToColumnName($propertyName)); + } + + /** + * Data Provider for NamingStrategy#tableName + * + * @return array + */ + static public function dataTableName() + { + return array( + array(self::defaultNaming(), 'someTable', + 'someTable' + ), + array(self::defaultNaming(), 'SOME_TABLE', + 'SOME_TABLE' + ), + array(self::defaultNaming(), 'some_table', + 'some_table' + ), + ); + } + + /** + * @dataProvider dataTableName + * + * @param NamingStrategy $strategy + * @param string $expected + * @param string $tableName + */ + public function testTableName(NamingStrategy $strategy, $expected, $tableName) + { + $this->assertEquals($expected, $strategy->tableName($tableName)); + } + + /** + * Data Provider for NamingStrategy#columnName + * + * @return array + */ + static public function dataColumnName() + { + return array( + array(self::defaultNaming(), 'someColumn', + 'someColumn' + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN' + ), + array(self::defaultNaming(), 'some_column', + 'some_column' + ), + ); + } + + /** + * @dataProvider dataColumnName + * + * @param NamingStrategy $strategy + * @param string $expected + * @param string $columnName + */ + public function testColumnName(NamingStrategy $strategy, $expected, $columnName) + { + $this->assertEquals($expected, $strategy->columnName($columnName)); + } + + /** + * Data Provider for NamingStrategy#collectionTableName + * + * @return array + */ + static public function dataCollectionTableName() + { + return array( + array(self::defaultNaming(), 'someColumn', + null, null, null, null, 'someColumn', + ), + array(self::defaultNaming(), 'SOME_COLUMN', + null, null, null, null, 'SOME_COLUMN' + ), + array(self::defaultNaming(), 'some_column', + null, null, null, null, 'some_column' + ), + ); + } + + /** + * @dataProvider dataCollectionTableName + * + * @param NamingStrategy $strategy + * @param string $expected + * @param string $ownerEntity + * @param string $ownerEntityTable + * @param string $associatedEntity + * @param string $associatedEntityTable + * @param string $propertyName + */ + public function testCollectionTableName(NamingStrategy $strategy, $expected, $ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName) + { + $this->assertEquals($expected, $strategy->collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName)); + } + + /** + * Data Provider for NamingStrategy#joinKeyColumnName + * + * @return array + */ + static public function dataJoinKeyColumnName() + { + return array( + array(self::defaultNaming(), 'someColumn', + 'someColumn', null, + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN', null, + ), + array(self::defaultNaming(), 'some_column', + 'some_column', null, + ), + ); + } + + /** + * @dataProvider dataJoinKeyColumnName + * + * @param NamingStrategy $strategy + * @param string $expected + * @param string $joinedColumn + * @param string $joinedTable + */ + public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $joinedColumn, $joinedTable) + { + $this->assertEquals($expected, $strategy->joinKeyColumnName($joinedColumn, $joinedTable)); + } + + /** + * Data Provider for NamingStrategy#foreignKeyColumnName + * + * @return array + */ + static public function dataForeignKeyColumnName() + { + return array( + array(self::defaultNaming(), 'someColumn', + 'someColumn', null, null, null, + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN', null, null, null, + ), + array(self::defaultNaming(), 'some_column', + 'some_column', null, null, null, + ), + + array(self::defaultNaming(), 'someColumn', + null, null, 'someColumn', null, + ), + array(self::defaultNaming(), 'SOME_COLUMN', + null, null, 'SOME_COLUMN', null, + ), + array(self::defaultNaming(), 'some_column', + null, null, 'some_column', null, + ), + ); + } + + /** + * @dataProvider dataForeignKeyColumnName + * + * @param NamingStrategy $strategy + * @param string $propertyName + * @param string $propertyEntityName + * @param string $propertyTableName + * @param string $referencedColumnName + */ + public function testForeignKeyColumnName(NamingStrategy $strategy, $expected, $propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName) + { + $this->assertEquals($expected, $strategy->foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName)); + } + + /** + * Data Provider for NamingStrategy#logicalColumnName + * + * @return array + */ + static public function dataLogicalColumnName() + { + return array( + array(self::defaultNaming(), 'someColumn', + 'someColumn', null, + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN', null, + ), + array(self::defaultNaming(), 'some_column', + 'some_column', null, + ), + + array(self::defaultNaming(), 'someColumn', + null, 'someColumn', + ), + array(self::defaultNaming(), 'SOME_COLUMN', + null, 'SOME_COLUMN', + ), + array(self::defaultNaming(), 'some_column', + null, 'some_column', + ), + ); + } + + /** + * @dataProvider dataLogicalColumnName + * + * @param NamingStrategy $strategy + * @param string $columnName + * @param string $propertyName + */ + public function testLogicalColumnName(NamingStrategy $strategy, $expected, $columnName, $propertyName) + { + $this->assertEquals($expected, $strategy->logicalColumnName($columnName, $propertyName)); + } + + + /** + * Data Provider for NamingStrategy#logicalCollectionTableName + * + * @return array + */ + static public function dataLogicalCollectionTableName() + { + return array( + array(self::defaultNaming(), 'SomeClassName_SomeAssocClassName', + null, 'SomeClassName', 'SomeAssocClassName', null + ), + array(self::defaultNaming(), 'SOME_CLASS_NAME_SOME_ASSOC_CLASS_NAME', + null, 'SOME_CLASS_NAME', 'SOME_ASSOC_CLASS_NAME', null + ), + array(self::defaultNaming(), 'some_class_name_some_assoc_class_name', + null, 'some_class_name', 'some_assoc_class_name', null + ), + + array(self::defaultNaming(), 'SomeClassName_someProperty', + null, 'SomeClassName', null, 'someProperty', + ), + array(self::defaultNaming(), 'SOME_CLASS_NAME_SOME_PROPERTY', + null, 'SOME_CLASS_NAME', null, 'SOME_PROPERTY', + ), + array(self::defaultNaming(), 'some_class_name_some_property', + null, 'some_class_name', null, 'some_property', + ), + + ); + } + + /** + * @dataProvider dataLogicalCollectionTableName + * + * @param NamingStrategy $strategy + * @param string $tableName + * @param string $ownerEntityTable + * @param string $associatedEntityTable + * @param string $propertyName + */ + public function testLogicalCollectionTableName(NamingStrategy $strategy, $expected, $tableName, $ownerEntityTable, $associatedEntityTable, $propertyName) + { + $this->assertEquals($expected, $strategy->logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName)); + } + + /** + * Data Provider for NamingStrategy#logicalCollectionColumnName + * + * @return array + */ + static public function dataLogicalCollectionColumnName() + { + return array( + array(self::defaultNaming(), 'someColumn', + 'someColumn', null, null, + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN', null, null, + ), + array(self::defaultNaming(), 'some_column', + 'some_column', null, null, + ), + + array(self::defaultNaming(), 'someColumn', + 'someColumn', 'some', 'Column', + ), + array(self::defaultNaming(), 'SOME_COLUMN', + 'SOME_COLUMN', 'SOME', 'COLUMN', + ), + array(self::defaultNaming(), 'some_column', + 'some_column', 'some', 'column', + ), + + ); + } + + /** + * @dataProvider dataLogicalCollectionColumnName + * + * @param NamingStrategy $strategy + * @param string $columnName + * @param string $propertyName + * @param string $referencedColumn + */ + public function testLogicalCollectionColumnName(NamingStrategy $strategy, $expected, $columnName, $propertyName, $referencedColumn) + { + $this->assertEquals($expected, $strategy->logicalCollectionColumnName($columnName, $propertyName, $referencedColumn)); + } + } \ No newline at end of file From 8368f0e4b9b11e916e632587f8b82f980b3af492 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 11:03:28 -0200 Subject: [PATCH 03/11] change default namming strategy --- lib/Doctrine/ORM/DefaultNamingStrategy.php | 59 +--- lib/Doctrine/ORM/NamingStrategy.php | 79 ++--- .../Doctrine/Tests/ORM/NamingStrategyTest.php | 280 +++--------------- 3 files changed, 82 insertions(+), 336 deletions(-) diff --git a/lib/Doctrine/ORM/DefaultNamingStrategy.php b/lib/Doctrine/ORM/DefaultNamingStrategy.php index 7e712a3bb..f12db9a9f 100644 --- a/lib/Doctrine/ORM/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/DefaultNamingStrategy.php @@ -30,12 +30,15 @@ namespace Doctrine\ORM; */ class DefaultNamingStrategy implements NamingStrategy { - /** * {@inheritdoc} */ public function classToTableName($className) { + if (strpos($className, '\\') !== false) { + return substr($className, strrpos($className, '\\') + 1); + } + return $className; } @@ -50,64 +53,34 @@ class DefaultNamingStrategy implements NamingStrategy /** * {@inheritdoc} */ - public function tableName($tableName) + public function referenceColumnName() { - return $tableName; + return 'id'; } /** * {@inheritdoc} */ - public function columnName($columnName) + public function joinColumnName($propertyName) { - return $columnName; + return $propertyName . '_' . $this->referenceColumnName(); } /** * {@inheritdoc} */ - public function collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName) + public function joinTableName($ownerEntity, $associatedEntity, $propertyName = null) { - return $propertyName; + return strtolower($this->classToTableName($ownerEntity) . '_' . + $this->classToTableName($associatedEntity)); } - + /** * {@inheritdoc} */ - public function joinKeyColumnName($joinedColumn, $joinedTable) + public function joinKeyColumnName($propertyEntityName, $referencedColumnName = null, $propertyName = null) { - return $joinedColumn; + return strtolower($this->classToTableName($propertyEntityName) . '_' . + ($referencedColumnName ?: $this->referenceColumnName())); } - - /** - * {@inheritdoc} - */ - public function foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName) - { - return $propertyName ?: $propertyTableName; - } - - /** - * {@inheritdoc} - */ - public function logicalColumnName($columnName, $propertyName) - { - return $columnName ?: $propertyName; - } - - /** - * {@inheritdoc} - */ - public function logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName) - { - return $ownerEntityTable . '_' . ( $associatedEntityTable ?: $propertyName ); - } - - /** - * {@inheritdoc} - */ - public function logicalCollectionColumnName($columnName, $propertyName, $referencedColumn) - { - return $columnName ?: ($propertyName . '_' . $referencedColumn); - } -} +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/NamingStrategy.php b/lib/Doctrine/ORM/NamingStrategy.php index ff72be46f..e91e334ad 100644 --- a/lib/Doctrine/ORM/NamingStrategy.php +++ b/lib/Doctrine/ORM/NamingStrategy.php @@ -40,82 +40,43 @@ interface NamingStrategy function classToTableName($className); /** - * Return a column name for a property path expression + * Return a column name for a property * - * @param string $propertyName A property path + * @param string $propertyName A property * @return string A column name */ function propertyToColumnName($propertyName); /** - * Alter the table name given in the mapping document + * Return the default reference column name * - * @param string tableName A table name - * @return string A table name - */ - function tableName($tableName); - - /** - * Alter the column name given in the mapping document - * - * @param string $columnName A column name * @return string A column name */ - function columnName($columnName); + function referenceColumnName(); + + /** + * Return a join column name for a property + * + * @param string $propertyName A property + * @return string A column name + */ + function joinColumnName($propertyName); /** - * Return a collection table name ie an association having a join table + * Return a join table name * * @param string $ownerEntity - * @param string $ownerEntityTable Owner side table name * @param string $associatedEntity - * @param string $associatedEntityTable Reverse side table name if any - * @param string $propertyName Collection role + * @param string $propertyName */ - function collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName); + function joinTableName($ownerEntity, $associatedEntity, $propertyName = null); - /** - * Return the join key column name ie a FK column used in a JOINED strategy or for a secondary table - * - * @param string $joinedColumn Joined column name used to join with - * @param string $joinedTable Joined table name used to join with - */ - function joinKeyColumnName($joinedColumn, $joinedTable); - - /** + /** * Return the foreign key column name for the given parameters * - * @param string $propertyName The property name involved * @param string $propertyEntityName - * @param string $propertyTableName The property table name involved (logical one) - * @param string $referencedColumnName The referenced column name involved (logical one) + * @param string $referencedColumnName + * @param string $propertyName */ - function foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName); - - /** - * Return the logical column name used to refer to a column in the metadata - * - * @param string $columnName Given column name if any - * @param string $propertyName Property name of this column - */ - function logicalColumnName($columnName, $propertyName); - - /** - * Returns the logical collection table name used to refer to a table in the mapping metadata - * - * @param string $tableName The metadata explicit name - * @param string $ownerEntityTable Owner table entity table name (logical one) - * @param string $associatedEntityTable Reverse side table name if any (logical one) - * @param string $propertyName Collection role - */ - function logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName); - - /** - * Returns the logical foreign key column name used to refer to this column in the mapping metadata - * - * @param string $columnName Given column name in the metadata if any - * @param string $propertyName Property name - * @param string $referencedColumn Referenced column name in the join - */ - function logicalCollectionColumnName($columnName, $propertyName, $referencedColumn); -} + function joinKeyColumnName($propertyEntityName, $referencedColumnName = null, $propertyName = null); +} \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php index 08b8c1b51..f17459118 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -39,11 +39,11 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::defaultNaming(), 'SomeClassName', 'SomeClassName' ), - array(self::defaultNaming(), 'SOME_CLASS_NAME', - 'SOME_CLASS_NAME' + array(self::defaultNaming(), 'SomeClassName', + '\SomeClassName' ), - array(self::defaultNaming(), 'some_class_name', - 'some_class_name' + array(self::defaultNaming(), 'Name', + '\Some\Class\Name' ), ); } @@ -51,7 +51,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataClassToTableName */ - public function testClassToTableName(NamingStrategy $strategy, $className, $expected) + public function testClassToTableName(NamingStrategy $strategy, $expected, $className) { $this->assertEquals($expected, $strategy->classToTableName($className)); } @@ -89,103 +89,94 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase } /** - * Data Provider for NamingStrategy#tableName + * Data Provider for NamingStrategy#referenceColumnName * * @return array */ - static public function dataTableName() + static public function dataReferenceColumnName() { return array( - array(self::defaultNaming(), 'someTable', - 'someTable' - ), - array(self::defaultNaming(), 'SOME_TABLE', - 'SOME_TABLE' - ), - array(self::defaultNaming(), 'some_table', - 'some_table' - ), + array(self::defaultNaming(), 'id'), ); } - + /** - * @dataProvider dataTableName - * + * @dataProvider dataReferenceColumnName + * * @param NamingStrategy $strategy * @param string $expected - * @param string $tableName + * @param string $joinedColumn + * @param string $joinedTable */ - public function testTableName(NamingStrategy $strategy, $expected, $tableName) + public function testReferenceColumnName(NamingStrategy $strategy, $expected) { - $this->assertEquals($expected, $strategy->tableName($tableName)); + $this->assertEquals($expected, $strategy->referenceColumnName()); } /** - * Data Provider for NamingStrategy#columnName + * Data Provider for NamingStrategy#joinColumnName * * @return array */ - static public function dataColumnName() + static public function dataJoinColumnName() { return array( - array(self::defaultNaming(), 'someColumn', - 'someColumn' + array(self::defaultNaming(), 'someColumn_id', + 'someColumn', null, ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN' + array(self::defaultNaming(), 'somecolumn_id', + 'somecolumn', null, ), - array(self::defaultNaming(), 'some_column', - 'some_column' + array(self::defaultNaming(), 'some_column_id', + 'some_column', null, ), ); } - + /** - * @dataProvider dataColumnName - * + * @dataProvider dataJoinColumnName + * * @param NamingStrategy $strategy * @param string $expected - * @param string $columnName + * @param string $propertyName */ - public function testColumnName(NamingStrategy $strategy, $expected, $columnName) + public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName) { - $this->assertEquals($expected, $strategy->columnName($columnName)); + $this->assertEquals($expected, $strategy->joinColumnName($propertyName)); } /** - * Data Provider for NamingStrategy#collectionTableName + * Data Provider for NamingStrategy#joinTableName * * @return array */ - static public function dataCollectionTableName() + static public function dataJoinTableName() { return array( - array(self::defaultNaming(), 'someColumn', - null, null, null, null, 'someColumn', + array(self::defaultNaming(), 'someclassname_classname', + 'SomeClassName', 'Some\ClassName', null, ), - array(self::defaultNaming(), 'SOME_COLUMN', - null, null, null, null, 'SOME_COLUMN' + array(self::defaultNaming(), 'someclassname_classname', + '\SomeClassName', 'ClassName', null, ), - array(self::defaultNaming(), 'some_column', - null, null, null, null, 'some_column' + array(self::defaultNaming(), 'name_classname', + '\Some\Class\Name', 'ClassName', null, ), ); } /** - * @dataProvider dataCollectionTableName + * @dataProvider dataJoinTableName * * @param NamingStrategy $strategy * @param string $expected * @param string $ownerEntity - * @param string $ownerEntityTable * @param string $associatedEntity - * @param string $associatedEntityTable * @param string $propertyName */ - public function testCollectionTableName(NamingStrategy $strategy, $expected, $ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName) + public function testJoinTableName(NamingStrategy $strategy, $expected, $ownerEntity, $associatedEntity, $propertyName = null) { - $this->assertEquals($expected, $strategy->collectionTableName($ownerEntity, $ownerEntityTable, $associatedEntity, $associatedEntityTable, $propertyName)); + $this->assertEquals($expected, $strategy->joinTableName($ownerEntity, $associatedEntity, $propertyName)); } /** @@ -196,14 +187,11 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataJoinKeyColumnName() { return array( - array(self::defaultNaming(), 'someColumn', - 'someColumn', null, + array(self::defaultNaming(), 'someclassname_id', + 'SomeClassName', null, null, ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN', null, - ), - array(self::defaultNaming(), 'some_column', - 'some_column', null, + array(self::defaultNaming(), 'name_identifier', + '\Some\Class\Name', 'identifier', null, ), ); } @@ -213,188 +201,12 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase * * @param NamingStrategy $strategy * @param string $expected - * @param string $joinedColumn - * @param string $joinedTable - */ - public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $joinedColumn, $joinedTable) - { - $this->assertEquals($expected, $strategy->joinKeyColumnName($joinedColumn, $joinedTable)); - } - - /** - * Data Provider for NamingStrategy#foreignKeyColumnName - * - * @return array - */ - static public function dataForeignKeyColumnName() - { - return array( - array(self::defaultNaming(), 'someColumn', - 'someColumn', null, null, null, - ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN', null, null, null, - ), - array(self::defaultNaming(), 'some_column', - 'some_column', null, null, null, - ), - - array(self::defaultNaming(), 'someColumn', - null, null, 'someColumn', null, - ), - array(self::defaultNaming(), 'SOME_COLUMN', - null, null, 'SOME_COLUMN', null, - ), - array(self::defaultNaming(), 'some_column', - null, null, 'some_column', null, - ), - ); - } - - /** - * @dataProvider dataForeignKeyColumnName - * - * @param NamingStrategy $strategy - * @param string $propertyName * @param string $propertyEntityName - * @param string $propertyTableName * @param string $referencedColumnName - */ - public function testForeignKeyColumnName(NamingStrategy $strategy, $expected, $propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName) - { - $this->assertEquals($expected, $strategy->foreignKeyColumnName($propertyName, $propertyEntityName, $propertyTableName, $referencedColumnName)); - } - - /** - * Data Provider for NamingStrategy#logicalColumnName - * - * @return array - */ - static public function dataLogicalColumnName() - { - return array( - array(self::defaultNaming(), 'someColumn', - 'someColumn', null, - ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN', null, - ), - array(self::defaultNaming(), 'some_column', - 'some_column', null, - ), - - array(self::defaultNaming(), 'someColumn', - null, 'someColumn', - ), - array(self::defaultNaming(), 'SOME_COLUMN', - null, 'SOME_COLUMN', - ), - array(self::defaultNaming(), 'some_column', - null, 'some_column', - ), - ); - } - - /** - * @dataProvider dataLogicalColumnName - * - * @param NamingStrategy $strategy - * @param string $columnName * @param string $propertyName */ - public function testLogicalColumnName(NamingStrategy $strategy, $expected, $columnName, $propertyName) + public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $propertyEntityName, $referencedColumnName = null, $propertyName = null) { - $this->assertEquals($expected, $strategy->logicalColumnName($columnName, $propertyName)); + $this->assertEquals($expected, $strategy->joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName)); } - - - /** - * Data Provider for NamingStrategy#logicalCollectionTableName - * - * @return array - */ - static public function dataLogicalCollectionTableName() - { - return array( - array(self::defaultNaming(), 'SomeClassName_SomeAssocClassName', - null, 'SomeClassName', 'SomeAssocClassName', null - ), - array(self::defaultNaming(), 'SOME_CLASS_NAME_SOME_ASSOC_CLASS_NAME', - null, 'SOME_CLASS_NAME', 'SOME_ASSOC_CLASS_NAME', null - ), - array(self::defaultNaming(), 'some_class_name_some_assoc_class_name', - null, 'some_class_name', 'some_assoc_class_name', null - ), - - array(self::defaultNaming(), 'SomeClassName_someProperty', - null, 'SomeClassName', null, 'someProperty', - ), - array(self::defaultNaming(), 'SOME_CLASS_NAME_SOME_PROPERTY', - null, 'SOME_CLASS_NAME', null, 'SOME_PROPERTY', - ), - array(self::defaultNaming(), 'some_class_name_some_property', - null, 'some_class_name', null, 'some_property', - ), - - ); - } - - /** - * @dataProvider dataLogicalCollectionTableName - * - * @param NamingStrategy $strategy - * @param string $tableName - * @param string $ownerEntityTable - * @param string $associatedEntityTable - * @param string $propertyName - */ - public function testLogicalCollectionTableName(NamingStrategy $strategy, $expected, $tableName, $ownerEntityTable, $associatedEntityTable, $propertyName) - { - $this->assertEquals($expected, $strategy->logicalCollectionTableName($tableName, $ownerEntityTable, $associatedEntityTable, $propertyName)); - } - - /** - * Data Provider for NamingStrategy#logicalCollectionColumnName - * - * @return array - */ - static public function dataLogicalCollectionColumnName() - { - return array( - array(self::defaultNaming(), 'someColumn', - 'someColumn', null, null, - ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN', null, null, - ), - array(self::defaultNaming(), 'some_column', - 'some_column', null, null, - ), - - array(self::defaultNaming(), 'someColumn', - 'someColumn', 'some', 'Column', - ), - array(self::defaultNaming(), 'SOME_COLUMN', - 'SOME_COLUMN', 'SOME', 'COLUMN', - ), - array(self::defaultNaming(), 'some_column', - 'some_column', 'some', 'column', - ), - - ); - } - - /** - * @dataProvider dataLogicalCollectionColumnName - * - * @param NamingStrategy $strategy - * @param string $columnName - * @param string $propertyName - * @param string $referencedColumn - */ - public function testLogicalCollectionColumnName(NamingStrategy $strategy, $expected, $columnName, $propertyName, $referencedColumn) - { - $this->assertEquals($expected, $strategy->logicalCollectionColumnName($columnName, $propertyName, $referencedColumn)); - } - } \ No newline at end of file From 537821418ea124c3ea82551d4431efc79d1f551f Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 11:29:50 -0200 Subject: [PATCH 04/11] apply naming strategy on ClassMetadataInfo --- lib/Doctrine/ORM/DefaultNamingStrategy.php | 10 ++-- .../ORM/Mapping/ClassMetadataInfo.php | 50 +++++++++---------- lib/Doctrine/ORM/NamingStrategy.php | 11 ++-- 3 files changed, 34 insertions(+), 37 deletions(-) diff --git a/lib/Doctrine/ORM/DefaultNamingStrategy.php b/lib/Doctrine/ORM/DefaultNamingStrategy.php index f12db9a9f..4d5a5b943 100644 --- a/lib/Doctrine/ORM/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/DefaultNamingStrategy.php @@ -69,18 +69,18 @@ class DefaultNamingStrategy implements NamingStrategy /** * {@inheritdoc} */ - public function joinTableName($ownerEntity, $associatedEntity, $propertyName = null) + public function joinTableName($sourceEntity, $targetEntity, $propertyName = null) { - return strtolower($this->classToTableName($ownerEntity) . '_' . - $this->classToTableName($associatedEntity)); + return strtolower($this->classToTableName($sourceEntity) . '_' . + $this->classToTableName($targetEntity)); } /** * {@inheritdoc} */ - public function joinKeyColumnName($propertyEntityName, $referencedColumnName = null, $propertyName = null) + public function joinKeyColumnName($entityName, $referencedColumnName = null) { - return strtolower($this->classToTableName($propertyEntityName) . '_' . + return strtolower($this->classToTableName($entityName) . '_' . ($referencedColumnName ?: $this->referenceColumnName())); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 6fbf8b3c6..fc1477fc8 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -494,16 +494,25 @@ class ClassMetadataInfo */ public $isReadOnly = false; + /** + * NamingStrategy determining the default column and table names + * + * @var \Doctrine\ORM\NamingStrategy + */ + protected $namingStrategy; + /** * Initializes a new ClassMetadata instance that will hold the object-relational mapping * metadata of the class with the given name. * * @param string $entityName The name of the entity class the new instance is used for. + * @param NamingStrategy $namingStrategy */ - public function __construct($entityName) + public function __construct($entityName, NamingStrategy $namingStrategy = null) { $this->name = $entityName; $this->rootEntityName = $entityName; + $this->namingStrategy = $namingStrategy ?: new \Doctrine\ORM\DefaultNamingStrategy(); } /** @@ -717,7 +726,7 @@ class ClassMetadataInfo // Complete fieldName and columnName mapping if ( ! isset($mapping['columnName'])) { - $mapping['columnName'] = $mapping['fieldName']; + $mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName']); } else { if ($mapping['columnName'][0] == '`') { $mapping['columnName'] = trim($mapping['columnName'], '`'); @@ -886,8 +895,8 @@ class ClassMetadataInfo if ( ! isset($mapping['joinColumns']) || ! $mapping['joinColumns']) { // Apply default join column $mapping['joinColumns'] = array(array( - 'name' => $mapping['fieldName'] . '_id', - 'referencedColumnName' => 'id' + 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName']), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName() )); } @@ -901,10 +910,10 @@ class ClassMetadataInfo } } if (empty($joinColumn['name'])) { - $joinColumn['name'] = $mapping['fieldName'] . '_id'; + $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName']); } if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = 'id'; + $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName']) @@ -965,40 +974,29 @@ class ClassMetadataInfo { $mapping = $this->_validateAndCompleteAssociationMapping($mapping); if ($mapping['isOwningSide']) { - if (strpos($mapping['sourceEntity'], '\\') !== false) { - $sourceShortName = strtolower(substr($mapping['sourceEntity'], strrpos($mapping['sourceEntity'], '\\') + 1)); - } else { - $sourceShortName = strtolower($mapping['sourceEntity']); - } - if (strpos($mapping['targetEntity'], '\\') !== false) { - $targetShortName = strtolower(substr($mapping['targetEntity'], strrpos($mapping['targetEntity'], '\\') + 1)); - } else { - $targetShortName = strtolower($mapping['targetEntity']); - } - // owning side MUST have a join table if ( ! isset($mapping['joinTable']['name'])) { - $mapping['joinTable']['name'] = $sourceShortName .'_' . $targetShortName; + $mapping['joinTable']['name'] = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); } if ( ! isset($mapping['joinTable']['joinColumns'])) { $mapping['joinTable']['joinColumns'] = array(array( - 'name' => $sourceShortName . '_id', - 'referencedColumnName' => 'id', + 'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity']), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), 'onDelete' => 'CASCADE')); } if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) { $mapping['joinTable']['inverseJoinColumns'] = array(array( - 'name' => $targetShortName . '_id', - 'referencedColumnName' => 'id', + 'name' => $this->namingStrategy->joinKeyColumnName($mapping['targetEntity']), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), 'onDelete' => 'CASCADE')); } foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) { if (empty($joinColumn['name'])) { - $joinColumn['name'] = $sourceShortName . '_id'; + $joinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $joinColumn['referencedColumnName']); } if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = 'id'; + $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') { $mapping['isOnDeleteCascade'] = true; @@ -1009,10 +1007,10 @@ class ClassMetadataInfo foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) { if (empty($inverseJoinColumn['name'])) { - $inverseJoinColumn['name'] = $targetShortName . '_id'; + $inverseJoinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $inverseJoinColumn['referencedColumnName']); } if (empty($inverseJoinColumn['referencedColumnName'])) { - $inverseJoinColumn['referencedColumnName'] = 'id'; + $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') { $mapping['isOnDeleteCascade'] = true; diff --git a/lib/Doctrine/ORM/NamingStrategy.php b/lib/Doctrine/ORM/NamingStrategy.php index e91e334ad..641f4d346 100644 --- a/lib/Doctrine/ORM/NamingStrategy.php +++ b/lib/Doctrine/ORM/NamingStrategy.php @@ -65,18 +65,17 @@ interface NamingStrategy /** * Return a join table name * - * @param string $ownerEntity - * @param string $associatedEntity + * @param string $sourceEntity + * @param string $targetEntity * @param string $propertyName */ - function joinTableName($ownerEntity, $associatedEntity, $propertyName = null); + function joinTableName($sourceEntity, $targetEntity, $propertyName = null); /** * Return the foreign key column name for the given parameters * - * @param string $propertyEntityName + * @param string $entityName * @param string $referencedColumnName - * @param string $propertyName */ - function joinKeyColumnName($propertyEntityName, $referencedColumnName = null, $propertyName = null); + function joinKeyColumnName($entityName, $referencedColumnName = null); } \ No newline at end of file From 8b1f60c9f8b3efd2f36b357f21cdc085cb57bcc9 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 12:16:36 -0200 Subject: [PATCH 05/11] add UnderscoreNamingStrategy --- lib/Doctrine/ORM/UnderscoreNamingStrategy.php | 133 ++++++++++++++++++ .../Doctrine/Tests/ORM/NamingStrategyTest.php | 106 ++++++++++++-- 2 files changed, 227 insertions(+), 12 deletions(-) create mode 100644 lib/Doctrine/ORM/UnderscoreNamingStrategy.php diff --git a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php new file mode 100644 index 000000000..409b4f0ee --- /dev/null +++ b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php @@ -0,0 +1,133 @@ +. + */ + +namespace Doctrine\ORM; +use Doctrine\Common\Util\Inflector; + +/** + * The default NamingStrategy + * + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.doctrine-project.org + * @since 2.3 + * @author Fabio B. Silva + */ +class UnderscoreNamingStrategy implements NamingStrategy +{ + const CASE_LOWER = 'lower'; + const CASE_UPPER = 'upper'; + + /** + * @var string + */ + private $case; + + /** + * @param string $case + */ + public function __construct($case = self::CASE_LOWER) + { + $this->case = $case; + } + + /** + * @return string + */ + public function getCase() + { + return $this->case; + } + + /** + * @param string $case + */ + public function setCase($case) + { + $this->case = $case; + } + + /** + * {@inheritdoc} + */ + public function classToTableName($className) + { + if (strpos($className, '\\') !== false) { + $className = substr($className, strrpos($className, '\\') + 1); + } + + return $this->underscore($className); + } + + /** + * {@inheritdoc} + */ + public function propertyToColumnName($propertyName) + { + return $this->underscore($propertyName); + } + + /** + * {@inheritdoc} + */ + public function referenceColumnName() + { + return $this->case == self::CASE_UPPER ? 'ID' : 'id'; + } + + /** + * {@inheritdoc} + */ + public function joinColumnName($propertyName) + { + return $this->underscore($propertyName) . '_' . $this->referenceColumnName(); + } + + /** + * {@inheritdoc} + */ + public function joinTableName($sourceEntity, $targetEntity, $propertyName = null) + { + return $this->classToTableName($sourceEntity) . '_' . $this->classToTableName($targetEntity); + } + + /** + * {@inheritdoc} + */ + public function joinKeyColumnName($entityName, $referencedColumnName = null) + { + return $this->classToTableName($entityName) . '_' . + ($referencedColumnName ?: $this->referenceColumnName()); + } + + /** + * @param string $string + * @return string + */ + private function underscore($string) + { + $string = Inflector::tableize($string); + + if ($this->case == self::CASE_UPPER) { + return strtoupper($string); + } + + return $string; + } +} \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php index f17459118..bf4ab7254 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM; +use Doctrine\ORM\UnderscoreNamingStrategy; use Doctrine\ORM\DefaultNamingStrategy; use Doctrine\ORM\NamingStrategy; @@ -12,20 +13,28 @@ require_once __DIR__ . '/../TestInit.php'; */ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase { - /** - * @var DefaultNamingStrategy - */ - private static $defaultNamingStrategy; - /** * @return DefaultNamingStrategy */ static private function defaultNaming() { - if (self::$defaultNamingStrategy == null) { - self::$defaultNamingStrategy = new DefaultNamingStrategy(); - } - return self::$defaultNamingStrategy; + return new DefaultNamingStrategy(); + } + + /** + * @return UnderscoreNamingStrategy + */ + static private function underscoreNamingLower() + { + return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_LOWER); + } + + /** + * @return UnderscoreNamingStrategy + */ + static private function underscoreNamingUpper() + { + return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_UPPER); } /** @@ -36,6 +45,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataClassToTableName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'SomeClassName', 'SomeClassName' ), @@ -45,6 +55,20 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::defaultNaming(), 'Name', '\Some\Class\Name' ), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'some_class_name', + '\Name\Space\SomeClassName' + ), + array(self::underscoreNamingLower(), 'name', + '\Some\Class\Name' + ), + array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME', + '\Name\Space\SomeClassName' + ), + array(self::underscoreNamingUpper(), 'NAME', + '\Some\Class\Name' + ), ); } @@ -64,6 +88,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataPropertyToColumnName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'someProperty', 'someProperty' ), @@ -73,6 +98,14 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::defaultNaming(), 'some_property', 'some_property' ), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'some_property', + 'someProperty' + ), + array(self::underscoreNamingUpper(), 'SOME_PROPERTY', + 'someProperty' + ), ); } @@ -96,7 +129,12 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataReferenceColumnName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'id'), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'id'), + array(self::underscoreNamingUpper(), 'ID'), ); } @@ -121,15 +159,21 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataJoinColumnName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'someColumn_id', 'someColumn', null, ), - array(self::defaultNaming(), 'somecolumn_id', - 'somecolumn', null, - ), array(self::defaultNaming(), 'some_column_id', 'some_column', null, ), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'some_column_id', + 'someColumn', null, + ), + array(self::underscoreNamingUpper(), 'SOME_COLUMN_ID', + 'someColumn', null, + ), ); } @@ -153,6 +197,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataJoinTableName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'someclassname_classname', 'SomeClassName', 'Some\ClassName', null, ), @@ -162,6 +207,27 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::defaultNaming(), 'name_classname', '\Some\Class\Name', 'ClassName', null, ), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'some_class_name_class_name', + 'SomeClassName', 'Some\ClassName', null, + ), + array(self::underscoreNamingLower(), 'some_class_name_class_name', + '\SomeClassName', 'ClassName', null, + ), + array(self::underscoreNamingLower(), 'name_class_name', + '\Some\Class\Name', 'ClassName', null, + ), + + array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', + 'SomeClassName', 'Some\ClassName', null, + ), + array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', + '\SomeClassName', 'ClassName', null, + ), + array(self::underscoreNamingUpper(), 'NAME_CLASS_NAME', + '\Some\Class\Name', 'ClassName', null, + ), ); } @@ -187,12 +253,28 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase static public function dataJoinKeyColumnName() { return array( + // DefaultNamingStrategy array(self::defaultNaming(), 'someclassname_id', 'SomeClassName', null, null, ), array(self::defaultNaming(), 'name_identifier', '\Some\Class\Name', 'identifier', null, ), + + // UnderscoreNamingStrategy + array(self::underscoreNamingLower(), 'some_class_name_id', + 'SomeClassName', null, null, + ), + array(self::underscoreNamingLower(), 'class_name_identifier', + '\Some\Class\ClassName', 'identifier', null, + ), + + array(self::underscoreNamingUpper(), 'SOME_CLASS_NAME_ID', + 'SomeClassName', null, null, + ), + array(self::underscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER', + '\Some\Class\ClassName', 'IDENTIFIER', null, + ), ); } From 83a94586531981804ae56d64ba9d6948d6afb64d Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 12:28:09 -0200 Subject: [PATCH 06/11] apply naming strategy on ClassMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 11 +++++++---- lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index a5b983fbb..a2e50d536 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -21,7 +21,8 @@ namespace Doctrine\ORM\Mapping; use ReflectionClass, ReflectionProperty; use Doctrine\Common\Persistence\Mapping\ClassMetadata AS IClassMetadata; - +use Doctrine\ORM\DefaultNamingStrategy; +use Doctrine\ORM\NamingStrategy; /** * A ClassMetadata instance holds all the object-relational mapping metadata * of an entity and it's associations. @@ -61,13 +62,15 @@ class ClassMetadata extends ClassMetadataInfo implements IClassMetadata * metadata of the class with the given name. * * @param string $entityName The name of the entity class the new instance is used for. + * @param NamingStrategy $namingStrategy */ - public function __construct($entityName) + public function __construct($entityName, NamingStrategy $namingStrategy = null) { + $namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); $this->reflClass = new ReflectionClass($entityName); $this->namespace = $this->reflClass->getNamespaceName(); - $this->table['name'] = $this->reflClass->getShortName(); - parent::__construct($this->reflClass->getName()); // do not use $entityName, possible case-problems + $this->table['name'] = $namingStrategy->classToTableName($this->reflClass->getShortName()); + parent::__construct($this->reflClass->getName(),$namingStrategy); // do not use $entityName, possible case-problems } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index fc1477fc8..7a845e754 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -21,6 +21,8 @@ namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; use ReflectionClass; +use Doctrine\ORM\DefaultNamingStrategy; +use Doctrine\ORM\NamingStrategy; /** * A ClassMetadata instance holds all the object-relational mapping metadata @@ -512,7 +514,7 @@ class ClassMetadataInfo { $this->name = $entityName; $this->rootEntityName = $entityName; - $this->namingStrategy = $namingStrategy ?: new \Doctrine\ORM\DefaultNamingStrategy(); + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); } /** From eac34b6d6a2bb5d81d3722f819a35a6addee133b Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 14:13:21 -0200 Subject: [PATCH 07/11] test ClassMetadata whit UnderscoreNamingStrategy --- lib/Doctrine/ORM/UnderscoreNamingStrategy.php | 5 +-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 45 +++++++++++++++++++ .../Doctrine/Tests/ORM/NamingStrategyTest.php | 6 +++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php index 409b4f0ee..b00b15990 100644 --- a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php @@ -19,7 +19,6 @@ */ namespace Doctrine\ORM; -use Doctrine\Common\Util\Inflector; /** * The default NamingStrategy @@ -122,12 +121,12 @@ class UnderscoreNamingStrategy implements NamingStrategy */ private function underscore($string) { - $string = Inflector::tableize($string); + $string = preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $string); if ($this->case == self::CASE_UPPER) { return strtoupper($string); } - return $string; + return strtolower($string); } } \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 7a4de4ca4..da591238d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -293,6 +293,51 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals('cmsuser_id', $cm->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); } + /** + * @group DDC-559 + */ + public function testUnderscoreNamingStrategyDefaults() + { + $namingStrategy = new \Doctrine\ORM\UnderscoreNamingStrategy(\Doctrine\ORM\UnderscoreNamingStrategy::CASE_UPPER); + $oneToOneMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); + $manyToManyMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); + + $oneToOneMetadata->mapOneToOne(array( + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser' + )); + + $manyToManyMetadata->mapManyToMany(array( + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser' + )); + + $this->assertEquals(array('USER_ID'=>'ID'), $oneToOneMetadata->associationMappings['user']['sourceToTargetKeyColumns']); + $this->assertEquals(array('USER_ID'=>'USER_ID'), $oneToOneMetadata->associationMappings['user']['joinColumnFieldNames']); + $this->assertEquals(array('ID'=>'USER_ID'), $oneToOneMetadata->associationMappings['user']['targetToSourceKeyColumns']); + + $this->assertEquals('USER_ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['name']); + $this->assertEquals('ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['referencedColumnName']); + + + $this->assertEquals('CMS_ADDRESS_CMS_USER', $manyToManyMetadata->associationMappings['user']['joinTable']['name']); + + $this->assertEquals(array('CMS_ADDRESS_ID','CMS_USER_ID'), $manyToManyMetadata->associationMappings['user']['joinTableColumns']); + $this->assertEquals(array('CMS_ADDRESS_ID'=>'ID'), $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); + $this->assertEquals(array('CMS_USER_ID'=>'ID'), $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); + + $this->assertEquals('CMS_ADDRESS_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['name']); + $this->assertEquals('CMS_USER_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); + + $this->assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['referencedColumnName']); + $this->assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + + + $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); + $cm->mapManyToMany(array('fieldName' => 'author', 'targetEntity' => 'Doctrine\Tests\Models\CMS\CmsUser')); + $this->assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']['name']); + } + /** * @group DDC-886 */ diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php index bf4ab7254..354ea67ff 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -106,6 +106,12 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::underscoreNamingUpper(), 'SOME_PROPERTY', 'someProperty' ), + array(self::underscoreNamingUpper(), 'SOME_PROPERTY', + 'some_property' + ), + array(self::underscoreNamingUpper(), 'SOME_PROPERTY', + 'SOME_PROPERTY' + ), ); } From 8bdb7130738df5b7a9c5d8f73e3cbfb72149c909 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Fri, 23 Dec 2011 14:41:03 -0200 Subject: [PATCH 08/11] add support for NamingStrategy --- lib/Doctrine/ORM/Configuration.php | 25 +++++++++++++++++++ .../ORM/Mapping/ClassMetadataFactory.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 23 +++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 83b4dc5dd..2b9fb5f7c 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -548,4 +548,29 @@ class Configuration extends \Doctrine\DBAL\Configuration return isset($this->_attributes['defaultRepositoryClassName']) ? $this->_attributes['defaultRepositoryClassName'] : 'Doctrine\ORM\EntityRepository'; } + + /** + * Set naming strategy. + * + * @since 2.3 + * @param NamingStrategy $namingStrategy + */ + public function setNamingStrategy(NamingStrategy $namingStrategy) + { + $this->_attributes['namingStrategy'] = $namingStrategy; + } + + /** + * Get naming strategy.. + * + * @since 2.3 + * @return NamingStrategy + */ + public function getNamingStrategy() + { + if (!isset($this->_attributes['namingStrategy'])) { + $this->_attributes['namingStrategy'] = new DefaultNamingStrategy(); + } + return $this->_attributes['namingStrategy']; + } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index bf802ecf9..9fd537d6a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -385,7 +385,7 @@ class ClassMetadataFactory implements ClassMetadataFactoryInterface */ protected function newClassMetadataInstance($className) { - return new ClassMetadata($className); + return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 0042259e1..0ddcb5dfb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -392,6 +392,29 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $this->assertEquals("INT unsigned NOT NULL", $class->fieldMappings['id']['columnDefinition']); $this->assertEquals("VARCHAR(255) NOT NULL", $class->fieldMappings['value']['columnDefinition']); } + + /** + * @group DDC-559 + */ + public function testNamingStrategy() + { + $driver = $this->_loadDriver(); + $em = $this->_getTestEntityManager(); + $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory(); + $em->getConfiguration()->setMetadataDriverImpl($driver); + $factory->setEntityManager($em); + + + $this->assertInstanceOf('Doctrine\ORM\DefaultNamingStrategy', $em->getConfiguration()->getNamingStrategy()); + $em->getConfiguration()->setNamingStrategy(new \Doctrine\ORM\UnderscoreNamingStrategy('upper')); + $this->assertInstanceOf('Doctrine\ORM\UnderscoreNamingStrategy', $em->getConfiguration()->getNamingStrategy()); + + $class = $factory->getMetadataFor('Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType'); + + $this->assertEquals('ID', $class->columnNames['id']); + $this->assertEquals('NAME', $class->columnNames['name']); + $this->assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table['name']); + } } /** From 1eddb53d6c244017601a487df836de870c7f761c Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Sat, 24 Dec 2011 11:45:51 -0200 Subject: [PATCH 09/11] fix CS and use php constants --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 1 + lib/Doctrine/ORM/NamingStrategy.php | 27 ++++++------ lib/Doctrine/ORM/UnderscoreNamingStrategy.php | 26 ++++++------ .../ORM/Mapping/AbstractMappingDriverTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Doctrine/Tests/ORM/NamingStrategyTest.php | 42 +++++++++---------- 6 files changed, 51 insertions(+), 49 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index a2e50d536..916b94511 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -23,6 +23,7 @@ use ReflectionClass, ReflectionProperty; use Doctrine\Common\Persistence\Mapping\ClassMetadata AS IClassMetadata; use Doctrine\ORM\DefaultNamingStrategy; use Doctrine\ORM\NamingStrategy; + /** * A ClassMetadata instance holds all the object-relational mapping metadata * of an entity and it's associations. diff --git a/lib/Doctrine/ORM/NamingStrategy.php b/lib/Doctrine/ORM/NamingStrategy.php index 641f4d346..a0147e76a 100644 --- a/lib/Doctrine/ORM/NamingStrategy.php +++ b/lib/Doctrine/ORM/NamingStrategy.php @@ -30,52 +30,53 @@ namespace Doctrine\ORM; */ interface NamingStrategy { - /** * Return a table name for an entity class * - * @param string $className The fully-qualified class name - * @return string A table name + * @param string $className The fully-qualified class name + * @return string A table name */ function classToTableName($className); /** * Return a column name for a property * - * @param string $propertyName A property - * @return string A column name + * @param string $propertyName A property + * @return string A column name */ function propertyToColumnName($propertyName); /** * Return the default reference column name * - * @return string A column name + * @return string A column name */ function referenceColumnName(); /** * Return a join column name for a property * - * @param string $propertyName A property - * @return string A column name + * @param string $propertyName A property + * @return string A join column name */ function joinColumnName($propertyName); /** * Return a join table name * - * @param string $sourceEntity - * @param string $targetEntity - * @param string $propertyName + * @param string $sourceEntity The source entity + * @param string $targetEntity The target entity + * @param string $propertyName A property + * @return string A join table name */ function joinTableName($sourceEntity, $targetEntity, $propertyName = null); /** * Return the foreign key column name for the given parameters * - * @param string $entityName - * @param string $referencedColumnName + * @param string $entityName A entity + * @param string $referencedColumnName A property + * @return string A join column name */ function joinKeyColumnName($entityName, $referencedColumnName = null); } \ No newline at end of file diff --git a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php index b00b15990..e9d60842a 100644 --- a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/UnderscoreNamingStrategy.php @@ -30,24 +30,23 @@ namespace Doctrine\ORM; */ class UnderscoreNamingStrategy implements NamingStrategy { - const CASE_LOWER = 'lower'; - const CASE_UPPER = 'upper'; - /** * @var string */ private $case; /** - * @param string $case + * Underscore naming strategy construct + * + * @param integer $case CASE_LOWER | CASE_UPPER */ - public function __construct($case = self::CASE_LOWER) + public function __construct($case = CASE_LOWER) { $this->case = $case; } /** - * @return string + * @return integer */ public function getCase() { @@ -55,7 +54,10 @@ class UnderscoreNamingStrategy implements NamingStrategy } /** - * @param string $case + * Sets string case CASE_LOWER | CASE_UPPER + * Alphabetic characters converted to lowercase or uppercase + * + * @param integer $case */ public function setCase($case) { @@ -87,7 +89,7 @@ class UnderscoreNamingStrategy implements NamingStrategy */ public function referenceColumnName() { - return $this->case == self::CASE_UPPER ? 'ID' : 'id'; + return $this->case === CASE_UPPER ? 'ID' : 'id'; } /** @@ -116,17 +118,17 @@ class UnderscoreNamingStrategy implements NamingStrategy } /** - * @param string $string - * @return string + * @param string $string + * @return string */ private function underscore($string) { $string = preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $string); - if ($this->case == self::CASE_UPPER) { + if ($this->case === CASE_UPPER) { return strtoupper($string); } - + return strtolower($string); } } \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 0ddcb5dfb..491bee220 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -406,7 +406,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $this->assertInstanceOf('Doctrine\ORM\DefaultNamingStrategy', $em->getConfiguration()->getNamingStrategy()); - $em->getConfiguration()->setNamingStrategy(new \Doctrine\ORM\UnderscoreNamingStrategy('upper')); + $em->getConfiguration()->setNamingStrategy(new \Doctrine\ORM\UnderscoreNamingStrategy(CASE_UPPER)); $this->assertInstanceOf('Doctrine\ORM\UnderscoreNamingStrategy', $em->getConfiguration()->getNamingStrategy()); $class = $factory->getMetadataFor('Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index da591238d..a77b73508 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -298,7 +298,7 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase */ public function testUnderscoreNamingStrategyDefaults() { - $namingStrategy = new \Doctrine\ORM\UnderscoreNamingStrategy(\Doctrine\ORM\UnderscoreNamingStrategy::CASE_UPPER); + $namingStrategy = new \Doctrine\ORM\UnderscoreNamingStrategy(CASE_UPPER); $oneToOneMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); $manyToManyMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php index 354ea67ff..ecaeeb845 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/NamingStrategyTest.php @@ -26,7 +26,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase */ static private function underscoreNamingLower() { - return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_LOWER); + return new UnderscoreNamingStrategy(CASE_LOWER); } /** @@ -34,7 +34,7 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase */ static private function underscoreNamingUpper() { - return new UnderscoreNamingStrategy(UnderscoreNamingStrategy::CASE_UPPER); + return new UnderscoreNamingStrategy(CASE_UPPER); } /** @@ -118,9 +118,9 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataPropertyToColumnName * - * @param NamingStrategy $strategy - * @param string $expected - * @param string $propertyName + * @param NamingStrategy $strategy + * @param string $expected + * @param string $propertyName */ public function testPropertyToColumnName(NamingStrategy $strategy, $expected, $propertyName) { @@ -147,10 +147,8 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataReferenceColumnName * - * @param NamingStrategy $strategy - * @param string $expected - * @param string $joinedColumn - * @param string $joinedTable + * @param NamingStrategy $strategy + * @param string $expected */ public function testReferenceColumnName(NamingStrategy $strategy, $expected) { @@ -186,9 +184,9 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataJoinColumnName * - * @param NamingStrategy $strategy - * @param string $expected - * @param string $propertyName + * @param NamingStrategy $strategy + * @param string $expected + * @param string $propertyName */ public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName) { @@ -240,11 +238,11 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataJoinTableName * - * @param NamingStrategy $strategy - * @param string $expected - * @param string $ownerEntity - * @param string $associatedEntity - * @param string $propertyName + * @param NamingStrategy $strategy + * @param string $expected + * @param string $ownerEntity + * @param string $associatedEntity + * @param string $propertyName */ public function testJoinTableName(NamingStrategy $strategy, $expected, $ownerEntity, $associatedEntity, $propertyName = null) { @@ -287,11 +285,11 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase /** * @dataProvider dataJoinKeyColumnName * - * @param NamingStrategy $strategy - * @param string $expected - * @param string $propertyEntityName - * @param string $referencedColumnName - * @param string $propertyName + * @param NamingStrategy $strategy + * @param string $expected + * @param string $propertyEntityName + * @param string $referencedColumnName + * @param string $propertyName */ public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $propertyEntityName, $referencedColumnName = null, $propertyName = null) { From e3acf43dbc94fb1fd2ee24da833a59168e9b2a08 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Sat, 24 Dec 2011 12:01:25 -0200 Subject: [PATCH 10/11] move naming classes to Doctrine\ORM\Mapping --- lib/Doctrine/ORM/Configuration.php | 4 +++- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 -- lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php | 2 -- .../ORM/{ => Mapping}/DefaultNamingStrategy.php | 2 +- lib/Doctrine/ORM/{ => Mapping}/NamingStrategy.php | 2 +- .../ORM/{ => Mapping}/UnderscoreNamingStrategy.php | 2 +- .../Tests/ORM/Mapping/AbstractMappingDriverTest.php | 6 +++--- tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Tests/ORM/{ => Mapping}/NamingStrategyTest.php | 10 +++++----- 9 files changed, 15 insertions(+), 17 deletions(-) rename lib/Doctrine/ORM/{ => Mapping}/DefaultNamingStrategy.php (98%) rename lib/Doctrine/ORM/{ => Mapping}/NamingStrategy.php (98%) rename lib/Doctrine/ORM/{ => Mapping}/UnderscoreNamingStrategy.php (99%) rename tests/Doctrine/Tests/ORM/{ => Mapping}/NamingStrategyTest.php (97%) diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 2b9fb5f7c..7a3f7fdec 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -24,7 +24,9 @@ use Doctrine\Common\Cache\Cache, Doctrine\Common\Annotations\AnnotationRegistry, Doctrine\Common\Annotations\AnnotationReader, Doctrine\ORM\Mapping\Driver\Driver, - Doctrine\ORM\Mapping\Driver\AnnotationDriver; + Doctrine\ORM\Mapping\Driver\AnnotationDriver, + Doctrine\ORM\Mapping\NamingStrategy, + Doctrine\ORM\Mapping\DefaultNamingStrategy; /** * Configuration container for all configuration options of Doctrine. diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 916b94511..a5410c748 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -21,8 +21,6 @@ namespace Doctrine\ORM\Mapping; use ReflectionClass, ReflectionProperty; use Doctrine\Common\Persistence\Mapping\ClassMetadata AS IClassMetadata; -use Doctrine\ORM\DefaultNamingStrategy; -use Doctrine\ORM\NamingStrategy; /** * A ClassMetadata instance holds all the object-relational mapping metadata diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 7a845e754..50b2fdb4b 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -21,8 +21,6 @@ namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; use ReflectionClass; -use Doctrine\ORM\DefaultNamingStrategy; -use Doctrine\ORM\NamingStrategy; /** * A ClassMetadata instance holds all the object-relational mapping metadata diff --git a/lib/Doctrine/ORM/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php similarity index 98% rename from lib/Doctrine/ORM/DefaultNamingStrategy.php rename to lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php index 4d5a5b943..5bfe31577 100644 --- a/lib/Doctrine/ORM/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM; +namespace Doctrine\ORM\Mapping; /** * The default NamingStrategy diff --git a/lib/Doctrine/ORM/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php similarity index 98% rename from lib/Doctrine/ORM/NamingStrategy.php rename to lib/Doctrine/ORM/Mapping/NamingStrategy.php index a0147e76a..36dd1234a 100644 --- a/lib/Doctrine/ORM/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM; +namespace Doctrine\ORM\Mapping; /** * A set of rules for determining the physical column and table names diff --git a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php similarity index 99% rename from lib/Doctrine/ORM/UnderscoreNamingStrategy.php rename to lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php index e9d60842a..4b2a9a9da 100644 --- a/lib/Doctrine/ORM/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM; +namespace Doctrine\ORM\Mapping; /** * The default NamingStrategy diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 491bee220..5ad1b65d2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -405,9 +405,9 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $factory->setEntityManager($em); - $this->assertInstanceOf('Doctrine\ORM\DefaultNamingStrategy', $em->getConfiguration()->getNamingStrategy()); - $em->getConfiguration()->setNamingStrategy(new \Doctrine\ORM\UnderscoreNamingStrategy(CASE_UPPER)); - $this->assertInstanceOf('Doctrine\ORM\UnderscoreNamingStrategy', $em->getConfiguration()->getNamingStrategy()); + $this->assertInstanceOf('Doctrine\ORM\Mapping\DefaultNamingStrategy', $em->getConfiguration()->getNamingStrategy()); + $em->getConfiguration()->setNamingStrategy(new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_UPPER)); + $this->assertInstanceOf('Doctrine\ORM\Mapping\UnderscoreNamingStrategy', $em->getConfiguration()->getNamingStrategy()); $class = $factory->getMetadataFor('Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index a77b73508..8b8392efb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -298,7 +298,7 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase */ public function testUnderscoreNamingStrategyDefaults() { - $namingStrategy = new \Doctrine\ORM\UnderscoreNamingStrategy(CASE_UPPER); + $namingStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_UPPER); $oneToOneMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); $manyToManyMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); diff --git a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php similarity index 97% rename from tests/Doctrine/Tests/ORM/NamingStrategyTest.php rename to tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index ecaeeb845..0c56aa810 100644 --- a/tests/Doctrine/Tests/ORM/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -1,12 +1,12 @@ Date: Sat, 24 Dec 2011 12:34:49 -0200 Subject: [PATCH 11/11] fix indentation --- lib/Doctrine/ORM/Mapping/NamingStrategy.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index 36dd1234a..8a7cbb335 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -53,7 +53,7 @@ interface NamingStrategy */ function referenceColumnName(); - /** + /** * Return a join column name for a property * * @param string $propertyName A property @@ -71,7 +71,7 @@ interface NamingStrategy */ function joinTableName($sourceEntity, $targetEntity, $propertyName = null); - /** + /** * Return the foreign key column name for the given parameters * * @param string $entityName A entity