Skip to content

Commit

Permalink
Compare type class when comparing columns.
Browse files Browse the repository at this point in the history
  • Loading branch information
garret-gunter committed Jun 17, 2019
1 parent f9e00b6 commit ccde56f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
7 changes: 6 additions & 1 deletion lib/Doctrine/DBAL/Schema/Comparator.php
Expand Up @@ -12,6 +12,7 @@
use function array_unique;
use function assert;
use function count;
use function get_class;
use function strtolower;

/**
Expand Down Expand Up @@ -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;
}
Expand Down
31 changes: 31 additions & 0 deletions tests/Doctrine/Tests/DBAL/Schema/ComparatorTest.php
Expand Up @@ -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
{
Expand Down Expand Up @@ -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'));
Expand Down

0 comments on commit ccde56f

Please sign in to comment.