Skip to content

Commit 315020c

Browse files
committed
Fix UniqueConstraint with empty name.
1 parent 6daf933 commit 315020c

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

lib/Doctrine/DBAL/Schema/Table.php

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

phpstan.neon.dist

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ parameters:
5959
# weird class name, doesn't exist in stubs either
6060
- '~unknown class OCI-(Lob|Collection)~'
6161

62-
# https://github.com/doctrine/dbal/issues/3236
63-
- '~^Call to an undefined method Doctrine\\DBAL\\Schema\\UniqueConstraint::getLocalColumns\(\)~'
64-
6562
# https://github.com/doctrine/dbal/issues/3237
6663
- '~^Call to an undefined method Doctrine\\DBAL\\Driver\\PDOStatement::nextRowset\(\)~'
6764

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

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
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;
1718
use function array_shift;
@@ -206,7 +207,11 @@ public function testConstraints()
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()
@@ -884,4 +889,33 @@ public function getNormalizesAssetNames()
884889
['"FOO"'],
885890
];
886891
}
892+
893+
public function testUniqueConstraintWithEmptyName() : void
894+
{
895+
$columns = [
896+
new Column('column1', Type::getType(Type::STRING)),
897+
new Column('column2', Type::getType(Type::STRING)),
898+
new Column('column3', Type::getType(Type::STRING)),
899+
new Column('column4', Type::getType(Type::STRING)),
900+
];
901+
902+
$uniqueConstraints = [
903+
new UniqueConstraint('', ['column1', 'column2']),
904+
new UniqueConstraint('', ['column3', 'column4']),
905+
];
906+
907+
$table = new Table('test', $columns, [], $uniqueConstraints);
908+
909+
$constraints = $table->getUniqueConstraints();
910+
911+
self::assertCount(2, $constraints);
912+
913+
$constraintNames = array_keys($constraints);
914+
915+
self::assertSame('fk_d87f7e0c341ce00bad15b1b1', $constraintNames[0]);
916+
self::assertSame('fk_d87f7e0cda12812744761484', $constraintNames[1]);
917+
918+
self::assertSame($uniqueConstraints[0], $constraints['fk_d87f7e0c341ce00bad15b1b1']);
919+
self::assertSame($uniqueConstraints[1], $constraints['fk_d87f7e0cda12812744761484']);
920+
}
887921
}

0 commit comments

Comments
 (0)