Skip to content

Commit de7b33d

Browse files
jwagemorozov
authored andcommitted
Merge pull request #3519 from doctrine/fix-unique-constraint-with-empty-name
Fix UniqueConstraint with empty name.
2 parents acb9d14 + f3ce029 commit de7b33d

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

lib/Doctrine/DBAL/Schema/Table.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ protected function _addUniqueConstraint(UniqueConstraint $constraint)
865865
$name = strlen($constraint->getName())
866866
? $constraint->getName()
867867
: $this->_generateIdentifierName(
868-
array_merge((array) $this->getName(), $constraint->getLocalColumns()),
868+
array_merge((array) $this->getName(), $constraint->getColumns()),
869869
'fk',
870870
$this->_getMaxIdentifierLength()
871871
);

phpstan.neon.dist

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ parameters:
5656
# weird class name, represented in stubs as OCI_(Lob|Collection)
5757
- '~unknown class OCI-(Lob|Collection)~'
5858

59-
# https://github.com/doctrine/dbal/issues/3236
60-
- '~^Call to an undefined method Doctrine\\DBAL\\Schema\\UniqueConstraint::getLocalColumns\(\)~'
61-
6259
# https://github.com/doctrine/dbal/issues/3237
6360
- '~^Call to an undefined method Doctrine\\DBAL\\Driver\\PDOStatement::nextRowset\(\)~'
6461

tests/Doctrine/Tests/DBAL/Schema/TableTest.php

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
use Doctrine\DBAL\Schema\Index;
1313
use Doctrine\DBAL\Schema\SchemaException;
1414
use Doctrine\DBAL\Schema\Table;
15+
use Doctrine\DBAL\Schema\UniqueConstraint;
1516
use Doctrine\DBAL\Types\Type;
1617
use Doctrine\Tests\DbalTestCase;
17-
use function array_shift;
18+
use function array_keys;
1819
use function current;
1920

2021
class TableTest extends DbalTestCase
@@ -206,7 +207,11 @@ public function testConstraints() : void
206207
$constraints = $tableA->getForeignKeys();
207208

208209
self::assertCount(1, $constraints);
209-
self::assertSame($constraint, array_shift($constraints));
210+
211+
$constraintNames = array_keys($constraints);
212+
213+
self::assertSame('fk_8c736521', $constraintNames[0]);
214+
self::assertSame($constraint, $constraints['fk_8c736521']);
210215
}
211216

212217
public function testOptions() : void
@@ -896,4 +901,33 @@ public function testTableComment() : void
896901
$table->setComment('foo');
897902
self::assertEquals('foo', $table->getComment());
898903
}
904+
905+
public function testUniqueConstraintWithEmptyName() : void
906+
{
907+
$columns = [
908+
new Column('column1', Type::getType(Type::STRING)),
909+
new Column('column2', Type::getType(Type::STRING)),
910+
new Column('column3', Type::getType(Type::STRING)),
911+
new Column('column4', Type::getType(Type::STRING)),
912+
];
913+
914+
$uniqueConstraints = [
915+
new UniqueConstraint('', ['column1', 'column2']),
916+
new UniqueConstraint('', ['column3', 'column4']),
917+
];
918+
919+
$table = new Table('test', $columns, [], $uniqueConstraints);
920+
921+
$constraints = $table->getUniqueConstraints();
922+
923+
self::assertCount(2, $constraints);
924+
925+
$constraintNames = array_keys($constraints);
926+
927+
self::assertSame('fk_d87f7e0c341ce00bad15b1b1', $constraintNames[0]);
928+
self::assertSame('fk_d87f7e0cda12812744761484', $constraintNames[1]);
929+
930+
self::assertSame($uniqueConstraints[0], $constraints['fk_d87f7e0c341ce00bad15b1b1']);
931+
self::assertSame($uniqueConstraints[1], $constraints['fk_d87f7e0cda12812744761484']);
932+
}
899933
}

0 commit comments

Comments
 (0)