Passed
Push — master ( d0c183...89bdb5 )
by Janko
13:17
created

Version20250624134244_ColonyChangeables::cleanColonyTable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 48
Code Lines 48

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 48
nc 1
nop 0
dl 0
loc 48
rs 9.1344
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Migrations\Pgsql;
6
7
use Doctrine\DBAL\Schema\Schema;
8
use Doctrine\Migrations\AbstractMigration;
9
10
final class Version20250624134244_ColonyChangeables extends AbstractMigration
11
{
12
    public function getDescription(): string
13
    {
14
        return 'Extract colony changeable values from colony entity.';
15
    }
16
17
    public function up(Schema $schema): void
18
    {
19
        $this->addSql('ALTER TABLE stu_colonies RENAME TO stu_colony');
20
21
        // create new table
22
        $this->addSql(<<<'SQL'
23
            CREATE TABLE stu_colony_changeable
24
                (bev_work INT NOT NULL, bev_free INT NOT NULL, bev_max INT NOT NULL, eps INT NOT NULL, max_eps INT NOT NULL,
25
                max_storage INT NOT NULL, populationlimit INT NOT NULL, immigrationstate BOOLEAN NOT NULL, shields INT DEFAULT NULL,
26
                shield_frequency INT DEFAULT NULL, colony_id INT NOT NULL, torpedo_type INT DEFAULT NULL, PRIMARY KEY(colony_id))
27
        SQL);
28
        $this->addSql(<<<'SQL'
29
            CREATE INDEX IDX_39D2AE0F942323E3 ON stu_colony_changeable (torpedo_type)
30
        SQL);
31
32
        // migrate data
33
        $this->addSql(<<<'SQL'
34
            INSERT INTO stu_colony_changeable 
35
                (colony_id, bev_work, bev_free, bev_max, eps, max_eps, max_storage,
36
                populationlimit, immigrationstate, shields, shield_frequency, torpedo_type)
37
            SELECT id, bev_work, bev_free, bev_max, eps, max_eps, max_storage, populationlimit,
38
                immigrationstate, shields, shield_frequency, torpedo_type
39
            FROM stu_colony c
40
        SQL);
41
42
        // set constraints
43
        $this->addSql(<<<'SQL'
44
            ALTER TABLE stu_colony_changeable ADD CONSTRAINT FK_39D2AE0F96ADBADE FOREIGN KEY (colony_id) REFERENCES stu_colony (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
45
        SQL);
46
        $this->addSql(<<<'SQL'
47
            ALTER TABLE stu_colony_changeable ADD CONSTRAINT FK_39D2AE0F942323E3 FOREIGN KEY (torpedo_type) REFERENCES stu_torpedo_types (id) NOT DEFERRABLE INITIALLY IMMEDIATE
48
        SQL);
49
50
        // clean colony table
51
        $this->cleanColonyTable();
52
    }
53
54
    private function cleanColonyTable(): void
55
    {
56
        $this->addSql(<<<'SQL'
57
            ALTER TABLE stu_colony DROP CONSTRAINT fk_d1c60f73942323e3
58
        SQL);
59
        $this->addSql(<<<'SQL'
60
            DROP INDEX idx_d1c60f73942323e3
61
        SQL);
62
        $this->addSql(<<<'SQL'
63
            DROP INDEX colony_sys_map_idx
64
        SQL);
65
        $this->addSql(<<<'SQL'
66
            ALTER TABLE stu_colony DROP bev_work
67
        SQL);
68
        $this->addSql(<<<'SQL'
69
            ALTER TABLE stu_colony DROP bev_free
70
        SQL);
71
        $this->addSql(<<<'SQL'
72
            ALTER TABLE stu_colony DROP bev_max
73
        SQL);
74
        $this->addSql(<<<'SQL'
75
            ALTER TABLE stu_colony DROP eps
76
        SQL);
77
        $this->addSql(<<<'SQL'
78
            ALTER TABLE stu_colony DROP max_eps
79
        SQL);
80
        $this->addSql(<<<'SQL'
81
            ALTER TABLE stu_colony DROP max_storage
82
        SQL);
83
        $this->addSql(<<<'SQL'
84
            ALTER TABLE stu_colony DROP populationlimit
85
        SQL);
86
        $this->addSql(<<<'SQL'
87
            ALTER TABLE stu_colony DROP immigrationstate
88
        SQL);
89
        $this->addSql(<<<'SQL'
90
            ALTER TABLE stu_colony DROP shields
91
        SQL);
92
        $this->addSql(<<<'SQL'
93
            ALTER TABLE stu_colony DROP shield_frequency
94
        SQL);
95
        $this->addSql(<<<'SQL'
96
            ALTER TABLE stu_colony DROP torpedo_type
97
        SQL);
98
        $this->addSql(<<<'SQL'
99
            ALTER INDEX colony_classes_idx RENAME TO IDX_D1C60F739106126
100
        SQL);
101
        $this->addSql(<<<'SQL'
102
            ALTER INDEX colony_user_idx RENAME TO IDX_D1C60F73A76ED395
103
        SQL);
104
    }
105
106
    public function down(Schema $schema): void
107
    {
108
        $this->addSql('ALTER TABLE stu_colony RENAME TO stu_colonies');
109
110
        // reset colony
111
        $this->resetColonyFields();
112
113
        // migrate data
114
        $this->addSql(<<<'SQL'
115
            UPDATE stu_colonies c
116
            SET bev_work = cc.bev_work, bev_free = cc.bev_free, bev_max = cc.bev_max, eps = cc.eps, max_eps = cc.max_eps,
117
                max_storage = cc.max_storage, populationlimit = cc.populationlimit, immigrationstate = cc.immigrationstate,
118
                shields = cc.shields, shield_frequency = cc.shield_frequency, torpedo_type = cc.torpedo_type
119
            FROM stu_colony_changeable cc
120
            WHERE c.id = cc.colony_id
121
        SQL);
122
123
        // finalize colony
124
        $this->addSql(<<<'SQL'
125
            ALTER TABLE stu_colonies ALTER bev_work SET NOT NULL
126
        SQL);
127
        $this->addSql(<<<'SQL'
128
            ALTER TABLE stu_colonies ALTER bev_free SET NOT NULL
129
        SQL);
130
        $this->addSql(<<<'SQL'
131
            ALTER TABLE stu_colonies ALTER bev_max SET NOT NULL
132
        SQL);
133
        $this->addSql(<<<'SQL'
134
            ALTER TABLE stu_colonies ALTER eps SET NOT NULL
135
        SQL);
136
        $this->addSql(<<<'SQL'
137
            ALTER TABLE stu_colonies ALTER max_eps SET NOT NULL
138
        SQL);
139
        $this->addSql(<<<'SQL'
140
            ALTER TABLE stu_colonies ALTER max_storage SET NOT NULL
141
        SQL);
142
        $this->addSql(<<<'SQL'
143
            ALTER TABLE stu_colonies ALTER populationlimit SET NOT NULL
144
        SQL);
145
        $this->addSql(<<<'SQL'
146
            ALTER TABLE stu_colonies ALTER immigrationstate SET NOT NULL
147
        SQL);
148
        $this->addSql(<<<'SQL'
149
            ALTER TABLE stu_colonies ADD CONSTRAINT fk_d1c60f73942323e3 FOREIGN KEY (torpedo_type) REFERENCES stu_torpedo_types (id) NOT DEFERRABLE INITIALLY IMMEDIATE
150
        SQL);
151
        $this->addSql(<<<'SQL'
152
            CREATE INDEX idx_d1c60f73942323e3 ON stu_colonies (torpedo_type)
153
        SQL);
154
        $this->addSql(<<<'SQL'
155
            CREATE INDEX colony_sys_map_idx ON stu_colonies (starsystem_map_id)
156
        SQL);
157
        $this->addSql(<<<'SQL'
158
            ALTER INDEX idx_d1c60f73a76ed395 RENAME TO colony_user_idx
159
        SQL);
160
        $this->addSql(<<<'SQL'
161
            ALTER INDEX idx_d1c60f739106126 RENAME TO colony_classes_idx
162
        SQL);
163
164
        // clear entity
165
        $this->addSql(<<<'SQL'
166
            ALTER TABLE stu_colony_changeable DROP CONSTRAINT FK_39D2AE0F96ADBADE
167
        SQL);
168
        $this->addSql(<<<'SQL'
169
            ALTER TABLE stu_colony_changeable DROP CONSTRAINT FK_39D2AE0F942323E3
170
        SQL);
171
        $this->addSql(<<<'SQL'
172
            DROP TABLE stu_colony_changeable
173
        SQL);
174
    }
175
176
    private function resetColonyFields(): void
177
    {
178
        $this->addSql(<<<'SQL'
179
            ALTER TABLE stu_colonies ADD bev_work INT DEFAULT NULL
180
        SQL);
181
        $this->addSql(<<<'SQL'
182
            ALTER TABLE stu_colonies ADD bev_free INT DEFAULT NULL
183
        SQL);
184
        $this->addSql(<<<'SQL'
185
            ALTER TABLE stu_colonies ADD bev_max INT DEFAULT NULL
186
        SQL);
187
        $this->addSql(<<<'SQL'
188
            ALTER TABLE stu_colonies ADD eps INT DEFAULT NULL
189
        SQL);
190
        $this->addSql(<<<'SQL'
191
            ALTER TABLE stu_colonies ADD max_eps INT DEFAULT NULL
192
        SQL);
193
        $this->addSql(<<<'SQL'
194
            ALTER TABLE stu_colonies ADD max_storage INT DEFAULT NULL
195
        SQL);
196
        $this->addSql(<<<'SQL'
197
            ALTER TABLE stu_colonies ADD populationlimit INT DEFAULT NULL
198
        SQL);
199
        $this->addSql(<<<'SQL'
200
            ALTER TABLE stu_colonies ADD immigrationstate BOOLEAN DEFAULT NULL
201
        SQL);
202
        $this->addSql(<<<'SQL'
203
            ALTER TABLE stu_colonies ADD shields INT DEFAULT NULL
204
        SQL);
205
        $this->addSql(<<<'SQL'
206
            ALTER TABLE stu_colonies ADD shield_frequency INT DEFAULT NULL
207
        SQL);
208
        $this->addSql(<<<'SQL'
209
            ALTER TABLE stu_colonies ADD torpedo_type INT DEFAULT NULL
210
        SQL);
211
    }
212
}
213