From 3d17290eb577ddeb94bd03a96de3159e5355c85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Mon, 18 Nov 2019 21:45:31 +0100 Subject: [PATCH 1/3] Fix BC-break on underscore naming strategy We broke our BC promises on the last patch release by changing how the underscore naming strategy parses values with numbers. This commit makes it possible to configure whether or not to make the underscore naming strategy aware of numbers, keeping the old configuration as default value. --- .../ORM/Mapping/UnderscoreNamingStrategy.php | 22 ++--- .../Tests/ORM/Mapping/NamingStrategyTest.php | 81 +++++++++++++++++-- 2 files changed, 89 insertions(+), 14 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php index 142f1bbb14e..1c219caa2cc 100644 --- a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php @@ -40,22 +40,26 @@ */ class UnderscoreNamingStrategy implements NamingStrategy { - private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/'; - private const PATTERN_FOR_PROPERTIES = '/(?<=[a-z0-9])([A-Z])/'; + private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/'; + private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/'; /** * @var integer */ private $case; + /** @var string */ + private $pattern; + /** * Underscore naming strategy construct. * - * @param integer $case CASE_LOWER | CASE_UPPER + * @param int $case CASE_LOWER | CASE_UPPER */ - public function __construct($case = CASE_LOWER) + public function __construct($case = CASE_LOWER, bool $numberAware = false) { - $this->case = $case; + $this->case = $case; + $this->pattern = $numberAware ? self::NUMBER_AWARE_PATTERN : self::DEFAULT_PATTERN; } /** @@ -96,7 +100,7 @@ public function classToTableName($className) */ public function propertyToColumnName($propertyName, $className = null) { - return $this->underscore($propertyName, self::PATTERN_FOR_PROPERTIES); + return $this->underscore($propertyName); } /** @@ -120,7 +124,7 @@ public function referenceColumnName() */ public function joinColumnName($propertyName, $className = null) { - return $this->underscore($propertyName, self::PATTERN_FOR_PROPERTIES) . '_' . $this->referenceColumnName(); + return $this->underscore($propertyName) . '_' . $this->referenceColumnName(); } /** @@ -140,9 +144,9 @@ public function joinKeyColumnName($entityName, $referencedColumnName = null) ($referencedColumnName ?: $this->referenceColumnName()); } - private function underscore(string $string, string $pattern = self::DEFAULT_PATTERN) : string + private function underscore(string $string) : string { - $string = preg_replace($pattern, '_$1', $string); + $string = preg_replace($this->pattern, '_$1', $string); if ($this->case === CASE_UPPER) { return strtoupper($string); diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index b6ac43f932f..c9eda5d9149 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -32,6 +32,16 @@ private static function underscoreNamingUpper() : UnderscoreNamingStrategy return new UnderscoreNamingStrategy(CASE_UPPER); } + private static function numberAwareUnderscoreNamingLower() : UnderscoreNamingStrategy + { + return new UnderscoreNamingStrategy(CASE_LOWER, true); + } + + private static function numberAwareUnderscoreNamingUpper() : UnderscoreNamingStrategy + { + return new UnderscoreNamingStrategy(CASE_UPPER, true); + } + /** * Data Provider for NamingStrategy#classToTableName * @@ -44,12 +54,25 @@ public static function dataClassToTableName() : array [self::defaultNaming(), 'SomeClassName', 'SomeClassName'], [self::defaultNaming(), 'SomeClassName', '\SomeClassName'], [self::defaultNaming(), 'Name', '\Some\Class\Name'], + [self::defaultNaming(), 'Name2Test', '\Some\Class\Name2Test'], // UnderscoreNamingStrategy [self::underscoreNamingLower(), 'some_class_name', '\Name\Space\SomeClassName'], [self::underscoreNamingLower(), 'name', '\Some\Class\Name'], + [self::underscoreNamingLower(), 'name2test', '\Some\Class\Name2Test'], [self::underscoreNamingUpper(), 'SOME_CLASS_NAME', '\Name\Space\SomeClassName'], [self::underscoreNamingUpper(), 'NAME', '\Some\Class\Name'], + [self::underscoreNamingUpper(), 'NAME2TEST', '\Some\Class\Name2Test'], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'some_class_name', '\Name\Space\SomeClassName'], + [self::numberAwareUnderscoreNamingLower(), 'name', '\Some\Class\Name'], + [self::numberAwareUnderscoreNamingLower(), 'name2_test', '\Some\Class\Name2Test'], + [self::numberAwareUnderscoreNamingLower(), 'name2test', '\Some\Class\Name2test'], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME', '\Name\Space\SomeClassName'], + [self::numberAwareUnderscoreNamingUpper(), 'NAME', '\Some\Class\Name'], + [self::numberAwareUnderscoreNamingUpper(), 'NAME2_TEST', '\Some\Class\Name2Test'], + [self::numberAwareUnderscoreNamingUpper(), 'NAME2TEST', '\Some\Class\Name2test'], ]; } @@ -78,13 +101,23 @@ public static function dataPropertyToColumnName() : array // UnderscoreNamingStrategy [self::underscoreNamingLower(), 'some_property', 'someProperty'], - [self::underscoreNamingLower(), 'base64_encoded', 'base64Encoded'], + [self::underscoreNamingLower(), 'base64encoded', 'base64Encoded'], [self::underscoreNamingLower(), 'base64encoded', 'base64encoded'], [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'someProperty'], [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'some_property'], [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'SOME_PROPERTY'], - [self::underscoreNamingUpper(), 'BASE64_ENCODED', 'base64Encoded'], + [self::underscoreNamingUpper(), 'BASE64ENCODED', 'base64Encoded'], [self::underscoreNamingUpper(), 'BASE64ENCODED', 'base64encoded'], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'some_property', 'someProperty'], + [self::numberAwareUnderscoreNamingLower(), 'base64_encoded', 'base64Encoded'], + [self::numberAwareUnderscoreNamingLower(), 'base64encoded', 'base64encoded'], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'someProperty'], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'some_property'], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'SOME_PROPERTY'], + [self::numberAwareUnderscoreNamingUpper(), 'BASE64_ENCODED', 'base64Encoded'], + [self::numberAwareUnderscoreNamingUpper(), 'BASE64ENCODED', 'base64encoded'], ]; } @@ -110,6 +143,10 @@ public static function dataReferenceColumnName() : array // UnderscoreNamingStrategy [self::underscoreNamingLower(), 'id'], [self::underscoreNamingUpper(), 'ID'], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'id'], + [self::numberAwareUnderscoreNamingUpper(), 'ID'], ]; } @@ -137,9 +174,18 @@ public static function dataJoinColumnName() : array // UnderscoreNamingStrategy [self::underscoreNamingLower(), 'some_column_id', 'someColumn', null], - [self::underscoreNamingLower(), 'base64_encoded_id', 'base64Encoded', null], + [self::underscoreNamingLower(), 'base64encoded_id', 'base64Encoded', null], [self::underscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null], - [self::underscoreNamingUpper(), 'BASE64_ENCODED_ID', 'base64Encoded', null], + [self::underscoreNamingUpper(), 'BASE64ENCODED_ID', 'base64Encoded', null], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'some_column_id', 'someColumn', null], + [self::numberAwareUnderscoreNamingLower(), 'base64_encoded_id', 'base64Encoded', null], + [self::numberAwareUnderscoreNamingLower(), 'base64encoded_id', 'base64encoded', null], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null], + [self::numberAwareUnderscoreNamingUpper(), 'BASE64_ENCODED_ID', 'base64Encoded', null], + [self::numberAwareUnderscoreNamingUpper(), 'BASE64ENCODED_ID', 'base64encoded', null], + // JoinColumnClassNamingStrategy [new JoinColumnClassNamingStrategy(), 'classname_someColumn_id', 'someColumn', 'Some\ClassName'], [new JoinColumnClassNamingStrategy(), 'classname_some_column_id', 'some_column', 'ClassName'], @@ -173,11 +219,23 @@ public static function dataJoinTableName() : array // UnderscoreNamingStrategy [self::underscoreNamingLower(), 'some_class_name_class_name', 'SomeClassName', 'Some\ClassName', null], + [self::underscoreNamingLower(), 'class1test_class2test', 'Class1Test', 'Some\Class2Test', null], [self::underscoreNamingLower(), 'some_class_name_class_name', '\SomeClassName', 'ClassName', null], [self::underscoreNamingLower(), 'name_class_name', '\Some\Class\Name', 'ClassName', null], [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', 'SomeClassName', 'Some\ClassName', null], + [self::underscoreNamingUpper(), 'CLASS1TEST_CLASS2TEST', 'Class1Test', 'Some\Class2Test', null], [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', '\SomeClassName', 'ClassName', null], [self::underscoreNamingUpper(), 'NAME_CLASS_NAME', '\Some\Class\Name', 'ClassName', null], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'some_class_name_class_name', 'SomeClassName', 'Some\ClassName', null], + [self::numberAwareUnderscoreNamingLower(), 'class1_test_class2_test', 'Class1Test', 'Some\Class2Test', null], + [self::numberAwareUnderscoreNamingLower(), 'some_class_name_class_name', '\SomeClassName', 'ClassName', null], + [self::numberAwareUnderscoreNamingLower(), 'name_class_name', '\Some\Class\Name', 'ClassName', null], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', 'SomeClassName', 'Some\ClassName', null], + [self::numberAwareUnderscoreNamingUpper(), 'CLASS1_TEST_CLASS2_TEST', 'Class1Test', 'Some\Class2Test', null], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', '\SomeClassName', 'ClassName', null], + [self::numberAwareUnderscoreNamingUpper(), 'NAME_CLASS_NAME', '\Some\Class\Name', 'ClassName', null], ]; } @@ -207,11 +265,24 @@ public static function dataJoinKeyColumnName() : array [self::defaultNaming(), 'name_identifier', '\Some\Class\Name', 'identifier', null], // UnderscoreNamingStrategy + [self::underscoreNamingLower(), 'some_class_name2test_id', 'SomeClassName2Test', null, null], [self::underscoreNamingLower(), 'some_class_name_id', 'SomeClassName', null, null], [self::underscoreNamingLower(), 'class_name_identifier', '\Some\Class\ClassName', 'identifier', null], - + [self::underscoreNamingLower(), 'name2test_identifier', '\Some\Class\Name2Test', 'identifier', null], [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_ID', 'SomeClassName', null, null], + [self::underscoreNamingUpper(), 'SOME_CLASS_NAME2TEST_ID', 'SomeClassName2Test', null, null], [self::underscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER', '\Some\Class\ClassName', 'IDENTIFIER', null], + [self::underscoreNamingUpper(), 'NAME2TEST_IDENTIFIER', '\Some\Class\Name2Test', 'IDENTIFIER', null], + + // NumberAwareUnderscoreNamingStrategy + [self::numberAwareUnderscoreNamingLower(), 'some_class_name2_test_id', 'SomeClassName2Test', null, null], + [self::numberAwareUnderscoreNamingLower(), 'some_class_name_id', 'SomeClassName', null, null], + [self::numberAwareUnderscoreNamingLower(), 'class_name_identifier', '\Some\Class\ClassName', 'identifier', null], + [self::numberAwareUnderscoreNamingLower(), 'name2_test_identifier', '\Some\Class\Name2Test', 'identifier', null], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_ID', 'SomeClassName', null, null], + [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME2_TEST_ID', 'SomeClassName2Test', null, null], + [self::numberAwareUnderscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER', '\Some\Class\ClassName', 'IDENTIFIER', null], + [self::numberAwareUnderscoreNamingUpper(), 'NAME2_TEST_IDENTIFIER', '\Some\Class\Name2Test', 'IDENTIFIER', null], ]; } From 2d9b9351831d1230881c52f006011cbf72fe944e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Mon, 18 Nov 2019 23:01:21 +0100 Subject: [PATCH 2/3] Bump up version --- lib/Doctrine/ORM/Version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php index dcae22958e9..06a86174bcc 100644 --- a/lib/Doctrine/ORM/Version.php +++ b/lib/Doctrine/ORM/Version.php @@ -35,7 +35,7 @@ class Version /** * Current Doctrine Version */ - const VERSION = '2.6.6-DEV'; + const VERSION = '2.6.6'; /** * Compares a Doctrine version with the current one. From 4fae126459d7deb6cb2877fc0c0f8ecfa4658516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Mon, 18 Nov 2019 23:05:16 +0100 Subject: [PATCH 3/3] Bump up version --- lib/Doctrine/ORM/Version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php index 06a86174bcc..bb8187398f6 100644 --- a/lib/Doctrine/ORM/Version.php +++ b/lib/Doctrine/ORM/Version.php @@ -35,7 +35,7 @@ class Version /** * Current Doctrine Version */ - const VERSION = '2.6.6'; + const VERSION = '2.6.7-DEV'; /** * Compares a Doctrine version with the current one.