Failed Conditions
Push — master ( c24352...310518 )
by Jonathan
16s
created

TableDefinition   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 123
ccs 46
cts 46
cp 1
rs 10
c 0
b 0
f 0
wmc 12

11 Methods

Rating   Name   Duplication   Size   Complexity  
A getDBALTable() 0 11 1
A getMigrationsColumn() 0 6 1
A getColumnLength() 0 3 1
A getColumnNames() 0 5 1
A getExecutedAtColumnName() 0 3 1
A getName() 0 3 1
A getNewDBALTable() 0 11 1
A getExecutedAtColumn() 0 5 1
A __construct() 0 12 1
A createDBALTable() 0 12 2
A getColumnName() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Migrations\Tracking;
6
7
use Doctrine\DBAL\Schema\AbstractSchemaManager;
8
use Doctrine\DBAL\Schema\Column;
9
use Doctrine\DBAL\Schema\Table;
10
use Doctrine\DBAL\Types\Type;
11
12
class TableDefinition
13
{
14
    public const MIGRATION_COLUMN_TYPE             = 'string';
15
    public const MIGRATION_EXECUTED_AT_COLUMN_TYPE = 'datetime_immutable';
16
17
    /** @var AbstractSchemaManager */
18
    private $schemaManager;
19
20
    /** @var string */
21
    private $name;
22
23
    /** @var string */
24
    private $columnName;
25
26
    /** @var int */
27
    private $columnLength;
28
29
    /** @var string */
30
    private $executedAtColumnName;
31
32 92
    public function __construct(
33
        AbstractSchemaManager $schemaManager,
34
        string $name,
35
        string $columnName,
36
        int $columnLength,
37
        string $executedAtColumnName
38
    ) {
39 92
        $this->schemaManager        = $schemaManager;
40 92
        $this->name                 = $name;
41 92
        $this->columnName           = $columnName;
42 92
        $this->columnLength         = $columnLength;
43 92
        $this->executedAtColumnName = $executedAtColumnName;
44 92
    }
45
46 79
    public function getName() : string
47
    {
48 79
        return $this->name;
49
    }
50
51 79
    public function getColumnName() : string
52
    {
53 79
        return $this->columnName;
54
    }
55
56 1
    public function getColumnLength() : int
57
    {
58 1
        return $this->columnLength;
59
    }
60
61 1
    public function getExecutedAtColumnName() : string
62
    {
63 1
        return $this->executedAtColumnName;
64
    }
65
66 85
    public function getMigrationsColumn() : Column
67
    {
68 85
        return new Column(
69 85
            $this->columnName,
70 85
            Type::getType(self::MIGRATION_COLUMN_TYPE),
71 85
            ['length' => $this->columnLength]
72
        );
73
    }
74
75 85
    public function getExecutedAtColumn() : Column
76
    {
77 85
        return new Column(
78 85
            $this->executedAtColumnName,
79 85
            Type::getType(self::MIGRATION_EXECUTED_AT_COLUMN_TYPE)
80
        );
81
    }
82
83
    /**
84
     * @return string[]
85
     */
86 60
    public function getColumnNames() : array
87
    {
88
        return [
89 60
            $this->columnName,
90 60
            $this->executedAtColumnName,
91
        ];
92
    }
93
94 2
    public function getDBALTable() : Table
95
    {
96 2
        $executedAtColumn = $this->getExecutedAtColumn();
97 2
        $executedAtColumn->setNotnull(false);
98
99
        $columns = [
100 2
            $this->columnName           => $this->getMigrationsColumn(),
101 2
            $this->executedAtColumnName => $executedAtColumn,
102
        ];
103
104 2
        return $this->createDBALTable($columns);
105
    }
106
107 76
    public function getNewDBALTable() : Table
108
    {
109 76
        $executedAtColumn = $this->getExecutedAtColumn();
110 76
        $executedAtColumn->setNotnull(true);
111
112
        $columns = [
113 76
            $this->columnName           => $this->getMigrationsColumn(),
114 76
            $this->executedAtColumnName => $executedAtColumn,
115
        ];
116
117 76
        return $this->createDBALTable($columns);
118
    }
119
120
    /**
121
     * @param Column[] $columns
122
     */
123 78
    public function createDBALTable(array $columns) : Table
124
    {
125 78
        $schemaConfig = $this->schemaManager->createSchemaConfig();
126
127 78
        $table = new Table($this->getName(), $columns);
128 78
        $table->setPrimaryKey([$this->getColumnName()]);
129
130 78
        foreach ($schemaConfig->getDefaultTableOptions() as $name => $value) {
131 4
            $table->addOption($name, $value);
132
        }
133
134 78
        return $table;
135
    }
136
}
137