Skip to content

Commit 234c37c

Browse files
committed
Deprecate using keys of table-scoped object collections as names
1 parent af03149 commit 234c37c

File tree

3 files changed

+30
-16
lines changed

3 files changed

+30
-16
lines changed

UPGRADE.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ awareness about deprecated code.
88

99
# Upgrade to 4.4
1010

11+
## Deprecated features of `Table::getIndexes()`, `Table::getUniqueConstraints()` and `Table::getForeignKeys()`
12+
13+
Using the keys of the arrays returned by `Table::getIndexes()`, `Table::getUniqueConstraints()` and
14+
`Table::getForeignKeys()` as index or constraint names is deprecated. Instead, retrieve the name from the index or
15+
constraint object using `NamedObject::getObjectName()` or `OptionallyNamedObject::getObjectName()`. In order to retrieve
16+
an object by name, use `Table::getIndex()`, `Table::getUniqueConstraint()` or `Table::getForeignKey()` respectively.
17+
1118
## Deprecated `AbstractAsset::getName()`
1219

1320
The `AbstractAsset::getName()` method has been deprecated. Instead, use `NamedObject::getObjectName()` or

src/Platforms/SQLitePlatform.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,9 @@ private function getIndexesInAlteredTable(TableDiff $diff): array
824824
$nameMap = $this->getDiffColumnNameMap($diff);
825825

826826
foreach ($indexes as $key => $index) {
827+
$indexName = $index->getName();
827828
foreach ($diff->getRenamedIndexes() as $oldIndexName => $renamedIndex) {
828-
if (strtolower($key) !== strtolower($oldIndexName)) {
829+
if (strtolower($indexName) !== strtolower($oldIndexName)) {
829830
continue;
830831
}
831832

src/Schema/Comparator.php

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,26 @@ public function compareTables(Table $oldTable, Table $newTable): TableDiff
228228
$newIndexes = $newTable->getIndexes();
229229

230230
// See if all the indexes from the old table exist in the new one
231-
foreach ($newIndexes as $newIndexName => $newIndex) {
231+
foreach ($newIndexes as $newIndex) {
232+
$newIndexName = $newIndex->getName();
233+
232234
if (($newIndex->isPrimary() && $oldTable->getPrimaryKey() !== null) || $oldTable->hasIndex($newIndexName)) {
233235
continue;
234236
}
235237

236-
$addedIndexes[$newIndexName] = $newIndex;
238+
$addedIndexes[] = $newIndex;
237239
}
238240

239241
// See if there are any removed indexes in the new table
240-
foreach ($oldIndexes as $oldIndexName => $oldIndex) {
242+
foreach ($oldIndexes as $oldIndex) {
243+
$oldIndexName = $oldIndex->getName();
244+
241245
// See if the index is removed in the new table.
242246
if (
243247
($oldIndex->isPrimary() && $newTable->getPrimaryKey() === null) ||
244248
! $oldIndex->isPrimary() && ! $newTable->hasIndex($oldIndexName)
245249
) {
246-
$droppedIndexes[$oldIndexName] = $oldIndex;
250+
$droppedIndexes[] = $oldIndex;
247251

248252
continue;
249253
}
@@ -259,8 +263,8 @@ public function compareTables(Table $oldTable, Table $newTable): TableDiff
259263
if ($shouldReportModifiedIndexes) {
260264
$modifiedIndexes[] = $newIndex;
261265
} else {
262-
$droppedIndexes[$oldIndexName] = $oldIndex;
263-
$addedIndexes[$oldIndexName] = $newIndex;
266+
$droppedIndexes[] = $oldIndex;
267+
$addedIndexes[] = $newIndex;
264268
}
265269
}
266270

@@ -359,8 +363,8 @@ private function detectRenamedColumns(array &$modifiedColumns, array &$addedColu
359363
* Try to find indexes that only changed their name, rename operations maybe cheaper than add/drop
360364
* however ambiguities between different possibilities should not lead to renaming at all.
361365
*
362-
* @param array<string,Index> $addedIndexes
363-
* @param array<string,Index> $removedIndexes
366+
* @param array<Index> $addedIndexes
367+
* @param array<Index> $removedIndexes
364368
*
365369
* @return array<string,Index>
366370
*/
@@ -369,13 +373,13 @@ private function detectRenamedIndexes(array &$addedIndexes, array &$removedIndex
369373
$candidatesByName = [];
370374

371375
// Gather possible rename candidates by comparing each added and removed index based on semantics.
372-
foreach ($addedIndexes as $addedIndexName => $addedIndex) {
373-
foreach ($removedIndexes as $removedIndex) {
376+
foreach ($addedIndexes as $addedIndexKey => $addedIndex) {
377+
foreach ($removedIndexes as $removedIndexKey => $removedIndex) {
374378
if ($this->diffIndex($addedIndex, $removedIndex)) {
375379
continue;
376380
}
377381

378-
$candidatesByName[$addedIndex->getName()][] = [$removedIndex, $addedIndex, $addedIndexName];
382+
$candidatesByName[$addedIndex->getName()][] = [$removedIndexKey, $addedIndexKey];
379383
}
380384
}
381385

@@ -390,19 +394,21 @@ private function detectRenamedIndexes(array &$addedIndexes, array &$removedIndex
390394
continue;
391395
}
392396

393-
[$removedIndex, $addedIndex] = $candidates[0];
397+
[$removedIndexKey, $addedIndexKey] = $candidates[0];
394398

399+
$removedIndex = $removedIndexes[$removedIndexKey];
395400
$removedIndexName = strtolower($removedIndex->getName());
396-
$addedIndexName = strtolower($addedIndex->getName());
397401

398402
if (isset($renamedIndexes[$removedIndexName])) {
399403
continue;
400404
}
401405

406+
$addedIndex = $addedIndexes[$addedIndexKey];
407+
402408
$renamedIndexes[$removedIndexName] = $addedIndex;
403409
unset(
404-
$addedIndexes[$addedIndexName],
405-
$removedIndexes[$removedIndexName],
410+
$addedIndexes[$addedIndexKey],
411+
$removedIndexes[$removedIndexKey],
406412
);
407413
}
408414

0 commit comments

Comments
 (0)