|
4 | 4 |
|
5 | 5 | namespace Cycle\Schema\Generator\Migrations; |
6 | 6 |
|
7 | | -use Cycle\Database\Schema\AbstractTable; |
8 | 7 | use Cycle\Migrations\Atomizer\Atomizer; |
| 8 | +use Cycle\Schema\Generator\Migrations\Changes\ChangeType; |
| 9 | +use Cycle\Schema\Generator\Migrations\Changes\Collector; |
9 | 10 |
|
10 | 11 | final class NameBasedOnChangesGenerator implements NameGeneratorInterface |
11 | 12 | { |
12 | 13 | public function generate(Atomizer $atomizer): string |
13 | 14 | { |
14 | | - $name = []; |
15 | | - |
16 | | - foreach ($atomizer->getTables() as $table) { |
17 | | - if ($table->getStatus() === AbstractTable::STATUS_NEW) { |
18 | | - $name[] = 'create_' . $table->getName(); |
19 | | - continue; |
20 | | - } |
21 | | - |
22 | | - if ($table->getStatus() === AbstractTable::STATUS_DECLARED_DROPPED) { |
23 | | - $name[] = 'drop_' . $table->getName(); |
24 | | - continue; |
25 | | - } |
26 | | - |
27 | | - if ($table->getComparator()->isRenamed()) { |
28 | | - $name[] = 'rename_' . $table->getInitialName(); |
29 | | - continue; |
30 | | - } |
31 | | - |
32 | | - $name[] = 'change_' . $table->getName(); |
33 | | - |
34 | | - $comparator = $table->getComparator(); |
35 | | - |
36 | | - foreach ($comparator->addedColumns() as $column) { |
37 | | - $name[] = 'add_' . $column->getName(); |
38 | | - } |
39 | | - |
40 | | - foreach ($comparator->droppedColumns() as $column) { |
41 | | - $name[] = 'rm_' . $column->getName(); |
42 | | - } |
43 | | - |
44 | | - foreach ($comparator->alteredColumns() as $column) { |
45 | | - $name[] = 'alter_' . $column[0]->getName(); |
46 | | - } |
47 | | - |
48 | | - foreach ($comparator->addedIndexes() as $index) { |
49 | | - $name[] = 'add_index_' . $index->getName(); |
50 | | - } |
51 | | - |
52 | | - foreach ($comparator->droppedIndexes() as $index) { |
53 | | - $name[] = 'rm_index_' . $index->getName(); |
54 | | - } |
55 | | - |
56 | | - foreach ($comparator->alteredIndexes() as $index) { |
57 | | - $name[] = 'alter_index_' . $index[0]->getName(); |
58 | | - } |
59 | | - |
60 | | - foreach ($comparator->addedForeignKeys() as $fk) { |
61 | | - $name[] = 'add_fk_' . $fk->getName(); |
62 | | - } |
63 | | - |
64 | | - foreach ($comparator->droppedForeignKeys() as $fk) { |
65 | | - $name[] = 'rm_fk_' . $fk->getName(); |
66 | | - } |
67 | | - |
68 | | - foreach ($comparator->alteredForeignKeys() as $fk) { |
69 | | - $name[] = 'alter_fk_' . $fk[0]->getName(); |
70 | | - } |
71 | | - } |
| 15 | + $collector = new Collector(); |
| 16 | + return \implode( |
| 17 | + '_', |
| 18 | + \array_map( |
| 19 | + fn(array $pair): string => $this->changeToString($pair[0], $pair[1]), |
| 20 | + $collector->collect($atomizer), |
| 21 | + ), |
| 22 | + ); |
| 23 | + } |
72 | 24 |
|
73 | | - return \implode('_', $name); |
| 25 | + private function changeToString(ChangeType $change, string $name): string |
| 26 | + { |
| 27 | + return sprintf( |
| 28 | + '%s_%s', |
| 29 | + match ($change) { |
| 30 | + ChangeType::CreateTable => 'create', |
| 31 | + ChangeType::DropTable => 'drop', |
| 32 | + ChangeType::RenameTable => 'rename', |
| 33 | + ChangeType::ChangeTable => 'change', |
| 34 | + ChangeType::AddColumn => 'add', |
| 35 | + ChangeType::DropColumn => 'rm', |
| 36 | + ChangeType::AlterColumn => 'alter', |
| 37 | + ChangeType::AddIndex => 'add_index', |
| 38 | + ChangeType::DropIndex => 'rm_index', |
| 39 | + ChangeType::AlterIndex => 'alter_index', |
| 40 | + ChangeType::AddFk => 'add_fk', |
| 41 | + ChangeType::DropFk => 'rm_fk', |
| 42 | + ChangeType::AlterFk => 'alter_fk', |
| 43 | + }, |
| 44 | + $name, |
| 45 | + ); |
74 | 46 | } |
75 | 47 | } |
0 commit comments