Passed
Pull Request — 2.x (#19)
by Alexander
22:21 queued 07:54
created

Collector   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 33
c 1
b 1
f 0
dl 0
loc 64
rs 10
wmc 14

1 Method

Rating   Name   Duplication   Size   Complexity  
F collect() 0 62 14
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Schema\Generator\Migrations\Changes;
6
7
use Cycle\Database\Schema\AbstractTable;
8
use Cycle\Migrations\Atomizer\Atomizer;
9
10
final class Collector
11
{
12
    public function collect(Atomizer $atomizer): array
13
    {
14
        $result = [];
15
16
        foreach ($atomizer->getTables() as $table) {
17
            if ($table->getStatus() === AbstractTable::STATUS_NEW) {
18
                $result[] = [ChangeType::Create, $table->getName()];
19
                continue;
20
            }
21
22
            if ($table->getStatus() === AbstractTable::STATUS_DECLARED_DROPPED) {
23
                $result[] = [ChangeType::Drop, $table->getName()];
24
                continue;
25
            }
26
27
            if ($table->getComparator()->isRenamed()) {
28
                $result[] = [ChangeType::Rename, $table->getInitialName()];
29
                continue;
30
            }
31
32
            $result[] = [ChangeType::Change, $table->getName()];
33
34
            $comparator = $table->getComparator();
35
36
            foreach ($comparator->addedColumns() as $column) {
37
                $result[] = [ChangeType::Add, $column->getName()];
38
            }
39
40
            foreach ($comparator->droppedColumns() as $column) {
41
                $result[] = [ChangeType::Remove, $column->getName()];
42
            }
43
44
            foreach ($comparator->alteredColumns() as $column) {
45
                $result[] = [ChangeType::Alter, $column[0]->getName()];
46
            }
47
48
            foreach ($comparator->addedIndexes() as $index) {
49
                $result[] = [ChangeType::AddIndex, $index->getName()];
50
            }
51
52
            foreach ($comparator->droppedIndexes() as $index) {
53
                $result[] = [ChangeType::RemoveIndex, $index->getName()];
54
            }
55
56
            foreach ($comparator->alteredIndexes() as $index) {
57
                $result[] = [ChangeType::AlterIndex, $index[0]->getName()];
58
            }
59
60
            foreach ($comparator->addedForeignKeys() as $fk) {
61
                $result[] = [ChangeType::AddFk, $fk->getName()];
62
            }
63
64
            foreach ($comparator->droppedForeignKeys() as $fk) {
65
                $result[] = [ChangeType::RemoveFk, $fk->getName()];
66
            }
67
68
            foreach ($comparator->alteredForeignKeys() as $fk) {
69
                $result[] = [ChangeType::AlterFk, $fk[0]->getName()];
70
            }
71
        }
72
73
        return $result;
74
    }
75
}
76