diff --git a/UPGRADE.md b/UPGRADE.md index 3e6f8c4afc6..73f80797549 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -8,6 +8,11 @@ awareness about deprecated code. # Upgrade to 4.1 +## Deprecated `TableDiff` methods + +The `TableDiff` methods `getModifiedColumns()` and `getRenamedColumns()` have been merged into a single +method `getChangedColumns()`. Use this method instead. + ## Deprecated support for MariaDB 10.4 and MySQL 5.7 * Upgrade to MariaDB 10.5 or later. diff --git a/psalm.xml.dist b/psalm.xml.dist index b44e29d2b8a..5d24c78e626 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -59,6 +59,8 @@ See https://github.com/doctrine/dbal/pull/6202 TODO: remove in 4.0.0 --> + + diff --git a/src/Schema/TableDiff.php b/src/Schema/TableDiff.php index 12b988cca7f..2bb514bc36e 100644 --- a/src/Schema/TableDiff.php +++ b/src/Schema/TableDiff.php @@ -4,7 +4,10 @@ namespace Doctrine\DBAL\Schema; +use Doctrine\Deprecations\Deprecation; + use function array_filter; +use function array_values; use function count; /** @@ -60,6 +63,52 @@ public function getChangedColumns(): array return $this->changedColumns; } + /** + * @deprecated Use {@see getChangedColumns()} instead. + * + * @return list + */ + public function getModifiedColumns(): array + { + Deprecation::triggerIfCalledFromOutside( + 'doctrine/dbal', + 'https://github.com/doctrine/dbal/pull/6280', + '%s is deprecated, use `getChangedColumns()` instead.', + __METHOD__, + ); + + return array_values(array_filter( + $this->getChangedColumns(), + static fn (ColumnDiff $diff): bool => $diff->countChangedProperties() > ($diff->hasNameChanged() ? 1 : 0), + )); + } + + /** + * @deprecated Use {@see getChangedColumns()} instead. + * + * @return array + */ + public function getRenamedColumns(): array + { + Deprecation::triggerIfCalledFromOutside( + 'doctrine/dbal', + 'https://github.com/doctrine/dbal/pull/6280', + '%s is deprecated, you should use `getChangedColumns()` instead.', + __METHOD__, + ); + $renamed = []; + foreach ($this->getChangedColumns() as $diff) { + if (! $diff->hasNameChanged()) { + continue; + } + + $oldColumnName = $diff->getOldColumn()->getName(); + $renamed[$oldColumnName] = $diff->getNewColumn(); + } + + return $renamed; + } + /** @return array */ public function getDroppedColumns(): array { diff --git a/tests/Functional/Platform/RenameColumnTest.php b/tests/Functional/Platform/RenameColumnTest.php index 7da75fbdb68..10a279fbd04 100644 --- a/tests/Functional/Platform/RenameColumnTest.php +++ b/tests/Functional/Platform/RenameColumnTest.php @@ -39,6 +39,8 @@ public function testColumnPositionRetainedAfterImplicitRenaming(string $columnNa self::assertEqualsIgnoringCase($newColumnName, $columns[0]->getName()); self::assertEqualsIgnoringCase('c2', $columns[1]->getName()); self::assertCount(1, self::getRenamedColumns($diff)); + self::assertCount(1, $diff->getRenamedColumns()); + self::assertCount(0, $diff->getModifiedColumns()); } /** @return array */ @@ -79,6 +81,8 @@ public function testColumnPositionRetainedAfterExplicitRenaming(string $columnNa $columns = $table->getColumns(); self::assertCount(1, $diff->getChangedColumns()); + self::assertCount(1, $diff->getRenamedColumns()); + self::assertCount(1, $diff->getModifiedColumns()); self::assertCount(2, $columns); self::assertEqualsIgnoringCase($newColumnName, $columns[0]->getName()); self::assertEqualsIgnoringCase('c2', $columns[1]->getName()); diff --git a/tests/Functional/Schema/ComparatorTest.php b/tests/Functional/Schema/ComparatorTest.php index b0fec96f6f2..da7244aad9c 100644 --- a/tests/Functional/Schema/ComparatorTest.php +++ b/tests/Functional/Schema/ComparatorTest.php @@ -74,7 +74,9 @@ public function testRenameColumnComparison(): void $compareResult = $comparator->compareTables($onlineTable, $table); $renamedColumns = RenameColumnTest::getRenamedColumns($compareResult); + self::assertSame($renamedColumns, $compareResult->getRenamedColumns()); self::assertCount(3, $compareResult->getChangedColumns()); + self::assertCount(2, $compareResult->getModifiedColumns()); self::assertCount(2, $renamedColumns); self::assertArrayHasKey('test2', $renamedColumns);