diff --git a/lib/Doctrine/DBAL/Schema/Comparator.php b/lib/Doctrine/DBAL/Schema/Comparator.php index 84d7808abef..9ccaa9a1efa 100644 --- a/lib/Doctrine/DBAL/Schema/Comparator.php +++ b/lib/Doctrine/DBAL/Schema/Comparator.php @@ -12,6 +12,7 @@ use function array_unique; use function assert; use function count; +use function get_class; use function strtolower; /** @@ -421,7 +422,11 @@ public function diffColumn(Column $column1, Column $column2) $changedProperties = []; - foreach (['type', 'notnull', 'unsigned', 'autoincrement'] as $property) { + if (get_class($properties1['type']) !== get_class($properties2['type'])) { + $changedProperties[] = 'type'; + } + + foreach (['notnull', 'unsigned', 'autoincrement'] as $property) { if ($properties1[$property] === $properties2[$property]) { continue; } diff --git a/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php b/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php index a98f477ac4c..43137e28883 100644 --- a/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php +++ b/tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php @@ -16,6 +16,7 @@ use Doctrine\DBAL\Types\Type; use PHPUnit\Framework\TestCase; use function array_keys; +use function get_class; class ComparatorTest extends TestCase { @@ -193,6 +194,36 @@ public function testCompareChangedColumnsChangeType() : void self::assertEquals([], $c->diffColumn($column1, $column1)); } + public function testCompareColumnsMultipleTypeInstances() : void + { + $integerType1 = Type::getType('integer'); + Type::overrideType('integer', get_class($integerType1)); + $integerType2 = Type::getType('integer'); + + $column1 = new Column('integerfield1', $integerType1); + $column2 = new Column('integerfield1', $integerType2); + + $c = new Comparator(); + self::assertEquals([], $c->diffColumn($column1, $column2)); + } + + public function testCompareColumnsOverriddenType() : void + { + $oldStringInstance = Type::getType('string'); + $integerType = Type::getType('integer'); + + Type::overrideType('string', get_class($integerType)); + $overriddenStringType = Type::getType('string'); + + Type::overrideType('string', get_class($oldStringInstance)); + + $column1 = new Column('integerfield1', $integerType); + $column2 = new Column('integerfield1', $overriddenStringType); + + $c = new Comparator(); + self::assertEquals([], $c->diffColumn($column1, $column2)); + } + public function testCompareChangedColumnsChangeCustomSchemaOption() : void { $column1 = new Column('charfield1', Type::getType('string'));