Skip to content

Commit 00837c0

Browse files
committed
Merge branch '4.1.x' into 5.0.x
* 4.1.x: Add deprecation layer for TableDiff methods (#6482) Ensure PostgreSQL field length change is executed again (#6490)
2 parents 1d47b6d + 6ef1518 commit 00837c0

File tree

7 files changed

+101
-0
lines changed

7 files changed

+101
-0
lines changed

UPGRADE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ all drivers and middleware.
2020

2121
# Upgrade to 4.1
2222

23+
## Deprecated `TableDiff` methods
24+
25+
The `TableDiff` methods `getModifiedColumns()` and `getRenamedColumns()` have been merged into a single
26+
method `getChangedColumns()`. Use this method instead.
27+
2328
## Deprecated support for MariaDB 10.4 and MySQL 5.7
2429

2530
* Upgrade to MariaDB 10.5 or later.

psalm.xml.dist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
See https://github.com/doctrine/dbal/pull/6202
4949
TODO: remove in 4.0.0
5050
-->
51+
<referencedMethod name="Doctrine\DBAL\Schema\TableDiff::getModifiedColumns" />
52+
<referencedMethod name="Doctrine\DBAL\Schema\TableDiff::getRenamedColumns" />
5153
<referencedMethod name="Doctrine\DBAL\Platforms\AbstractMySQLPlatform::getColumnTypeSQLSnippets" />
5254
<referencedMethod name="Doctrine\DBAL\Platforms\AbstractMySQLPlatform::getDatabaseNameSQL" />
5355

src/Platforms/PostgreSQLPlatform.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ public function getAlterTableSQL(TableDiff $diff): array
252252
|| $columnDiff->hasPrecisionChanged()
253253
|| $columnDiff->hasScaleChanged()
254254
|| $columnDiff->hasFixedChanged()
255+
|| $columnDiff->hasLengthChanged()
255256
) {
256257
$type = $newColumn->getType();
257258

src/Schema/TableDiff.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
namespace Doctrine\DBAL\Schema;
66

7+
use Doctrine\Deprecations\Deprecation;
8+
79
use function array_filter;
10+
use function array_values;
811
use function count;
912

1013
/**
@@ -60,6 +63,52 @@ public function getChangedColumns(): array
6063
return $this->changedColumns;
6164
}
6265

66+
/**
67+
* @deprecated Use {@see getChangedColumns()} instead.
68+
*
69+
* @return list<ColumnDiff>
70+
*/
71+
public function getModifiedColumns(): array
72+
{
73+
Deprecation::triggerIfCalledFromOutside(
74+
'doctrine/dbal',
75+
'https://github.com/doctrine/dbal/pull/6280',
76+
'%s is deprecated, use `getChangedColumns()` instead.',
77+
__METHOD__,
78+
);
79+
80+
return array_values(array_filter(
81+
$this->getChangedColumns(),
82+
static fn (ColumnDiff $diff): bool => $diff->countChangedProperties() > ($diff->hasNameChanged() ? 1 : 0),
83+
));
84+
}
85+
86+
/**
87+
* @deprecated Use {@see getChangedColumns()} instead.
88+
*
89+
* @return array<string,Column>
90+
*/
91+
public function getRenamedColumns(): array
92+
{
93+
Deprecation::triggerIfCalledFromOutside(
94+
'doctrine/dbal',
95+
'https://github.com/doctrine/dbal/pull/6280',
96+
'%s is deprecated, you should use `getChangedColumns()` instead.',
97+
__METHOD__,
98+
);
99+
$renamed = [];
100+
foreach ($this->getChangedColumns() as $diff) {
101+
if (! $diff->hasNameChanged()) {
102+
continue;
103+
}
104+
105+
$oldColumnName = $diff->getOldColumn()->getName();
106+
$renamed[$oldColumnName] = $diff->getNewColumn();
107+
}
108+
109+
return $renamed;
110+
}
111+
63112
/** @return array<Column> */
64113
public function getDroppedColumns(): array
65114
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Doctrine\DBAL\Tests\Functional\Platform;
6+
7+
use Doctrine\DBAL\Schema\Table;
8+
use Doctrine\DBAL\Tests\FunctionalTestCase;
9+
use Doctrine\DBAL\Types\Types;
10+
11+
class AlterColumnLengthChangeTest extends FunctionalTestCase
12+
{
13+
public function testColumnLengthIsChanged(): void
14+
{
15+
$table = new Table('test_alter_length');
16+
$table->addColumn('c1', Types::STRING)->setLength(50);
17+
18+
$this->dropAndCreateTable($table);
19+
20+
$sm = $this->connection->createSchemaManager();
21+
$table = $sm->introspectTable('test_alter_length');
22+
$columns = $table->getColumns();
23+
self::assertCount(1, $columns);
24+
self::assertSame(50, $columns[0]->getLength());
25+
26+
$table->getColumn('c1')->setLength(100);
27+
28+
$diff = $sm->createComparator()
29+
->compareTables($sm->introspectTable('test_alter_length'), $table);
30+
31+
$sm->alterTable($diff);
32+
33+
$table = $sm->introspectTable('test_alter_length');
34+
$columns = $table->getColumns();
35+
36+
self::assertCount(1, $columns);
37+
self::assertSame(100, $columns[0]->getLength());
38+
}
39+
}

tests/Functional/Platform/RenameColumnTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public function testColumnPositionRetainedAfterImplicitRenaming(string $columnNa
3939
self::assertEqualsIgnoringCase($newColumnName, $columns[0]->getName());
4040
self::assertEqualsIgnoringCase('c2', $columns[1]->getName());
4141
self::assertCount(1, self::getRenamedColumns($diff));
42+
self::assertCount(1, $diff->getRenamedColumns());
4243
}
4344

4445
/** @return array<string,Column> */
@@ -79,6 +80,8 @@ public function testColumnPositionRetainedAfterExplicitRenaming(string $columnNa
7980
$columns = $table->getColumns();
8081

8182
self::assertCount(1, $diff->getChangedColumns());
83+
self::assertCount(1, $diff->getRenamedColumns());
84+
self::assertCount(1, $diff->getModifiedColumns());
8285
self::assertCount(2, $columns);
8386
self::assertEqualsIgnoringCase($newColumnName, $columns[0]->getName());
8487
self::assertEqualsIgnoringCase('c2', $columns[1]->getName());

tests/Functional/Schema/ComparatorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public function testRenameColumnComparison(): void
7474

7575
$compareResult = $comparator->compareTables($onlineTable, $table);
7676
$renamedColumns = RenameColumnTest::getRenamedColumns($compareResult);
77+
self::assertSame($renamedColumns, $compareResult->getRenamedColumns());
7778
self::assertCount(3, $compareResult->getChangedColumns());
79+
self::assertCount(2, $compareResult->getModifiedColumns());
7880
self::assertCount(2, $renamedColumns);
7981
self::assertArrayHasKey('test2', $renamedColumns);
8082

0 commit comments

Comments
 (0)