Passed
Push — dev ( 48073e...2ba144 )
by Janko
16:20
created

recreateRemovedColumns()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 120
Code Lines 120

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 120
nc 1
nop 0
dl 0
loc 120
rs 8
c 1
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 Version20250623081902_RumpModuleLevels extends AbstractMigration
11
{
12
    public function getDescription(): string
13
    {
14
        return 'Add values column for cleaner implementation.';
15
    }
16
17
    public function up(Schema $schema): void
18
    {
19
        $this->addSql(<<<'SQL'
20
            DROP INDEX rump_module_level_ship_rump_idx
21
        SQL);
22
        $this->addSql(<<<'SQL'
23
            ALTER TABLE stu_rumps_module_level DROP CONSTRAINT idx_223131_primary
24
        SQL);
25
26
        $this->addSql(<<<'SQL'
27
            ALTER TABLE stu_rumps_module_level RENAME TO stu_rump_module_level
28
        SQL);
29
30
        //migrate data
31
        $this->addSql(<<<'SQL'
32
            ALTER TABLE stu_rump_module_level ADD type_values JSON DEFAULT NULL
33
        SQL);
34
        $this->fillValues();
35
36
37
        $this->addSql(<<<'SQL'
38
            ALTER TABLE stu_rump_module_level ADD CONSTRAINT FK_83E895DE2EE98D4C FOREIGN KEY (rump_id) REFERENCES stu_rump (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
39
        SQL);
40
        $this->addSql(<<<'SQL'
41
            ALTER TABLE stu_rump_module_level ADD PRIMARY KEY (rump_id)
42
        SQL);
43
44
        $this->removeObsoleteFields();
45
    }
46
47
    private function fillValues(): void
48
    {
49
        $this->addSql(<<<'SQL'
50
            UPDATE stu_rump_module_level AS s
51
            SET type_values = level_json
52
            FROM (
53
                SELECT rump_id, jsonb_object_agg(level::text, jsonb_build_object(
54
                    'min', min_val,
55
                    'default', def_val,
56
                    'max', max_val,
57
                    'mandatory', (mandatory != 0)
58
                )) AS level_json
59
                FROM (
60
                    SELECT rump_id, 1 AS level, module_level_1_min AS min_val, module_level_1 AS def_val, module_level_1_max AS max_val, module_mandatory_1 AS mandatory FROM stu_rump_module_level
61
                    UNION ALL
62
                    SELECT rump_id, 2, module_level_2_min, module_level_2, module_level_2_max, module_mandatory_2 FROM stu_rump_module_level
63
                    UNION ALL
64
                    SELECT rump_id, 3, module_level_3_min, module_level_3, module_level_3_max, module_mandatory_3 FROM stu_rump_module_level
65
                    UNION ALL
66
                    SELECT rump_id, 4, module_level_4_min, module_level_4, module_level_4_max, module_mandatory_4 FROM stu_rump_module_level
67
                    UNION ALL
68
                    SELECT rump_id, 5, module_level_5_min, module_level_5, module_level_5_max, module_mandatory_5 FROM stu_rump_module_level
69
                    UNION ALL
70
                    SELECT rump_id, 6, module_level_6_min, module_level_6, module_level_6_max, module_mandatory_6 FROM stu_rump_module_level
71
                    UNION ALL
72
                    SELECT rump_id, 7, module_level_7_min, module_level_7, module_level_7_max, module_mandatory_7 FROM stu_rump_module_level
73
                    UNION ALL
74
                    SELECT rump_id, 8, module_level_8_min, module_level_8, module_level_8_max, module_mandatory_8 FROM stu_rump_module_level
75
                    UNION ALL
76
                    SELECT rump_id, 10, module_level_10_min, module_level_10, module_level_10_max, module_mandatory_10 FROM stu_rump_module_level
77
                    UNION ALL
78
                    SELECT rump_id, 11, module_level_11_min, module_level_11, module_level_11_max, module_mandatory_11 FROM stu_rump_module_level
79
                ) AS levels
80
                GROUP BY rump_id
81
            ) AS json_data
82
            WHERE s.rump_id = json_data.rump_id;
83
        SQL);
84
    }
85
86
    public function down(Schema $schema): void
87
    {
88
        $this->recreateRemovedColumns();
89
90
        $this->addSql(<<<'SQL'
91
            ALTER TABLE stu_rump_module_level DROP CONSTRAINT FK_83E895DE2EE98D4C
92
        SQL);
93
        $this->addSql(<<<'SQL'
94
            ALTER TABLE stu_rump_module_level DROP CONSTRAINT stu_rump_module_level_pkey
95
        SQL);
96
97
        $this->addSql(<<<'SQL'
98
            ALTER TABLE stu_rump_module_level RENAME TO stu_rumps_module_level
99
        SQL);
100
101
        $this->addSql(<<<'SQL'
102
            ALTER TABLE stu_rumps_module_level ADD id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL
103
        SQL);
104
        $this->addSql(<<<'SQL'
105
            ALTER TABLE stu_rumps_module_level DROP type_values
106
        SQL);
107
        $this->addSql(<<<'SQL'
108
            CREATE INDEX rump_module_level_ship_rump_idx ON stu_rumps_module_level (rump_id)
109
        SQL);
110
        $this->addSql(<<<'SQL'
111
            ALTER TABLE stu_rumps_module_level ADD CONSTRAINT idx_223131_primary PRIMARY KEY (id)
112
        SQL);
113
    }
114
115
    private function removeObsoleteFields(): void
116
    {
117
        $this->addSql(<<<'SQL'
118
            ALTER TABLE stu_rump_module_level DROP id
119
        SQL);
120
        $this->addSql(<<<'SQL'
121
            ALTER TABLE stu_rump_module_level DROP module_level_1
122
        SQL);
123
        $this->addSql(<<<'SQL'
124
            ALTER TABLE stu_rump_module_level DROP module_level_2
125
        SQL);
126
        $this->addSql(<<<'SQL'
127
            ALTER TABLE stu_rump_module_level DROP module_level_3
128
        SQL);
129
        $this->addSql(<<<'SQL'
130
            ALTER TABLE stu_rump_module_level DROP module_level_4
131
        SQL);
132
        $this->addSql(<<<'SQL'
133
            ALTER TABLE stu_rump_module_level DROP module_level_5
134
        SQL);
135
        $this->addSql(<<<'SQL'
136
            ALTER TABLE stu_rump_module_level DROP module_level_6
137
        SQL);
138
        $this->addSql(<<<'SQL'
139
            ALTER TABLE stu_rump_module_level DROP module_level_7
140
        SQL);
141
        $this->addSql(<<<'SQL'
142
            ALTER TABLE stu_rump_module_level DROP module_level_8
143
        SQL);
144
        $this->addSql(<<<'SQL'
145
            ALTER TABLE stu_rump_module_level DROP module_mandatory_1
146
        SQL);
147
        $this->addSql(<<<'SQL'
148
            ALTER TABLE stu_rump_module_level DROP module_mandatory_2
149
        SQL);
150
        $this->addSql(<<<'SQL'
151
            ALTER TABLE stu_rump_module_level DROP module_mandatory_3
152
        SQL);
153
        $this->addSql(<<<'SQL'
154
            ALTER TABLE stu_rump_module_level DROP module_mandatory_4
155
        SQL);
156
        $this->addSql(<<<'SQL'
157
            ALTER TABLE stu_rump_module_level DROP module_mandatory_5
158
        SQL);
159
        $this->addSql(<<<'SQL'
160
            ALTER TABLE stu_rump_module_level DROP module_mandatory_6
161
        SQL);
162
        $this->addSql(<<<'SQL'
163
            ALTER TABLE stu_rump_module_level DROP module_mandatory_7
164
        SQL);
165
        $this->addSql(<<<'SQL'
166
            ALTER TABLE stu_rump_module_level DROP module_mandatory_8
167
        SQL);
168
        $this->addSql(<<<'SQL'
169
            ALTER TABLE stu_rump_module_level DROP module_level_1_min
170
        SQL);
171
        $this->addSql(<<<'SQL'
172
            ALTER TABLE stu_rump_module_level DROP module_level_1_max
173
        SQL);
174
        $this->addSql(<<<'SQL'
175
            ALTER TABLE stu_rump_module_level DROP module_level_2_min
176
        SQL);
177
        $this->addSql(<<<'SQL'
178
            ALTER TABLE stu_rump_module_level DROP module_level_2_max
179
        SQL);
180
        $this->addSql(<<<'SQL'
181
            ALTER TABLE stu_rump_module_level DROP module_level_3_min
182
        SQL);
183
        $this->addSql(<<<'SQL'
184
            ALTER TABLE stu_rump_module_level DROP module_level_3_max
185
        SQL);
186
        $this->addSql(<<<'SQL'
187
            ALTER TABLE stu_rump_module_level DROP module_level_4_min
188
        SQL);
189
        $this->addSql(<<<'SQL'
190
            ALTER TABLE stu_rump_module_level DROP module_level_4_max
191
        SQL);
192
        $this->addSql(<<<'SQL'
193
            ALTER TABLE stu_rump_module_level DROP module_level_5_min
194
        SQL);
195
        $this->addSql(<<<'SQL'
196
            ALTER TABLE stu_rump_module_level DROP module_level_5_max
197
        SQL);
198
        $this->addSql(<<<'SQL'
199
            ALTER TABLE stu_rump_module_level DROP module_level_6_min
200
        SQL);
201
        $this->addSql(<<<'SQL'
202
            ALTER TABLE stu_rump_module_level DROP module_level_6_max
203
        SQL);
204
        $this->addSql(<<<'SQL'
205
            ALTER TABLE stu_rump_module_level DROP module_level_7_min
206
        SQL);
207
        $this->addSql(<<<'SQL'
208
            ALTER TABLE stu_rump_module_level DROP module_level_7_max
209
        SQL);
210
        $this->addSql(<<<'SQL'
211
            ALTER TABLE stu_rump_module_level DROP module_level_8_min
212
        SQL);
213
        $this->addSql(<<<'SQL'
214
            ALTER TABLE stu_rump_module_level DROP module_level_8_max
215
        SQL);
216
        $this->addSql(<<<'SQL'
217
            ALTER TABLE stu_rump_module_level DROP module_level_11
218
        SQL);
219
        $this->addSql(<<<'SQL'
220
            ALTER TABLE stu_rump_module_level DROP module_mandatory_11
221
        SQL);
222
        $this->addSql(<<<'SQL'
223
            ALTER TABLE stu_rump_module_level DROP module_level_11_min
224
        SQL);
225
        $this->addSql(<<<'SQL'
226
            ALTER TABLE stu_rump_module_level DROP module_level_11_max
227
        SQL);
228
        $this->addSql(<<<'SQL'
229
            ALTER TABLE stu_rump_module_level DROP module_level_10
230
        SQL);
231
        $this->addSql(<<<'SQL'
232
            ALTER TABLE stu_rump_module_level DROP module_mandatory_10
233
        SQL);
234
        $this->addSql(<<<'SQL'
235
            ALTER TABLE stu_rump_module_level DROP module_level_10_min
236
        SQL);
237
        $this->addSql(<<<'SQL'
238
            ALTER TABLE stu_rump_module_level DROP module_level_10_max
239
        SQL);
240
    }
241
242
243
    private function recreateRemovedColumns(): void
244
    {
245
        $this->addSql(<<<'SQL'
246
            ALTER TABLE stu_rump_module_level ADD module_level_1 SMALLINT NOT NULL DEFAULT 0
247
        SQL);
248
        $this->addSql(<<<'SQL'
249
            ALTER TABLE stu_rump_module_level ADD module_level_2 SMALLINT NOT NULL DEFAULT 0
250
        SQL);
251
        $this->addSql(<<<'SQL'
252
            ALTER TABLE stu_rump_module_level ADD module_level_3 SMALLINT NOT NULL DEFAULT 0
253
        SQL);
254
        $this->addSql(<<<'SQL'
255
            ALTER TABLE stu_rump_module_level ADD module_level_4 SMALLINT NOT NULL DEFAULT 0
256
        SQL);
257
        $this->addSql(<<<'SQL'
258
            ALTER TABLE stu_rump_module_level ADD module_level_5 SMALLINT NOT NULL DEFAULT 0
259
        SQL);
260
        $this->addSql(<<<'SQL'
261
            ALTER TABLE stu_rump_module_level ADD module_level_6 SMALLINT NOT NULL DEFAULT 0
262
        SQL);
263
        $this->addSql(<<<'SQL'
264
            ALTER TABLE stu_rump_module_level ADD module_level_7 SMALLINT NOT NULL DEFAULT 0
265
        SQL);
266
        $this->addSql(<<<'SQL'
267
            ALTER TABLE stu_rump_module_level ADD module_level_8 SMALLINT NOT NULL DEFAULT 0
268
        SQL);
269
        $this->addSql(<<<'SQL'
270
            ALTER TABLE stu_rump_module_level ADD module_mandatory_1 SMALLINT NOT NULL DEFAULT 0
271
        SQL);
272
        $this->addSql(<<<'SQL'
273
            ALTER TABLE stu_rump_module_level ADD module_mandatory_2 SMALLINT NOT NULL DEFAULT 0
274
        SQL);
275
        $this->addSql(<<<'SQL'
276
            ALTER TABLE stu_rump_module_level ADD module_mandatory_3 SMALLINT NOT NULL DEFAULT 0
277
        SQL);
278
        $this->addSql(<<<'SQL'
279
            ALTER TABLE stu_rump_module_level ADD module_mandatory_4 SMALLINT NOT NULL DEFAULT 0
280
        SQL);
281
        $this->addSql(<<<'SQL'
282
            ALTER TABLE stu_rump_module_level ADD module_mandatory_5 SMALLINT NOT NULL DEFAULT 0
283
        SQL);
284
        $this->addSql(<<<'SQL'
285
            ALTER TABLE stu_rump_module_level ADD module_mandatory_6 SMALLINT NOT NULL DEFAULT 0
286
        SQL);
287
        $this->addSql(<<<'SQL'
288
            ALTER TABLE stu_rump_module_level ADD module_mandatory_7 SMALLINT NOT NULL DEFAULT 0
289
        SQL);
290
        $this->addSql(<<<'SQL'
291
            ALTER TABLE stu_rump_module_level ADD module_mandatory_8 SMALLINT NOT NULL DEFAULT 0
292
        SQL);
293
        $this->addSql(<<<'SQL'
294
            ALTER TABLE stu_rump_module_level ADD module_level_1_min SMALLINT NOT NULL DEFAULT 0
295
        SQL);
296
        $this->addSql(<<<'SQL'
297
            ALTER TABLE stu_rump_module_level ADD module_level_1_max SMALLINT NOT NULL DEFAULT 0
298
        SQL);
299
        $this->addSql(<<<'SQL'
300
            ALTER TABLE stu_rump_module_level ADD module_level_2_min SMALLINT NOT NULL DEFAULT 0
301
        SQL);
302
        $this->addSql(<<<'SQL'
303
            ALTER TABLE stu_rump_module_level ADD module_level_2_max SMALLINT NOT NULL DEFAULT 0
304
        SQL);
305
        $this->addSql(<<<'SQL'
306
            ALTER TABLE stu_rump_module_level ADD module_level_3_min SMALLINT NOT NULL DEFAULT 0
307
        SQL);
308
        $this->addSql(<<<'SQL'
309
            ALTER TABLE stu_rump_module_level ADD module_level_3_max SMALLINT NOT NULL DEFAULT 0
310
        SQL);
311
        $this->addSql(<<<'SQL'
312
            ALTER TABLE stu_rump_module_level ADD module_level_4_min SMALLINT NOT NULL DEFAULT 0
313
        SQL);
314
        $this->addSql(<<<'SQL'
315
            ALTER TABLE stu_rump_module_level ADD module_level_4_max SMALLINT NOT NULL DEFAULT 0
316
        SQL);
317
        $this->addSql(<<<'SQL'
318
            ALTER TABLE stu_rump_module_level ADD module_level_5_min SMALLINT NOT NULL DEFAULT 0
319
        SQL);
320
        $this->addSql(<<<'SQL'
321
            ALTER TABLE stu_rump_module_level ADD module_level_5_max SMALLINT NOT NULL DEFAULT 0
322
        SQL);
323
        $this->addSql(<<<'SQL'
324
            ALTER TABLE stu_rump_module_level ADD module_level_6_min SMALLINT NOT NULL DEFAULT 0
325
        SQL);
326
        $this->addSql(<<<'SQL'
327
            ALTER TABLE stu_rump_module_level ADD module_level_6_max SMALLINT NOT NULL DEFAULT 0
328
        SQL);
329
        $this->addSql(<<<'SQL'
330
            ALTER TABLE stu_rump_module_level ADD module_level_7_min SMALLINT NOT NULL DEFAULT 0
331
        SQL);
332
        $this->addSql(<<<'SQL'
333
            ALTER TABLE stu_rump_module_level ADD module_level_7_max SMALLINT NOT NULL DEFAULT 0
334
        SQL);
335
        $this->addSql(<<<'SQL'
336
            ALTER TABLE stu_rump_module_level ADD module_level_8_min SMALLINT NOT NULL DEFAULT 0
337
        SQL);
338
        $this->addSql(<<<'SQL'
339
            ALTER TABLE stu_rump_module_level ADD module_level_8_max SMALLINT NOT NULL DEFAULT 0
340
        SQL);
341
        $this->addSql(<<<'SQL'
342
            ALTER TABLE stu_rump_module_level ADD module_level_11 SMALLINT NOT NULL DEFAULT 0
343
        SQL);
344
        $this->addSql(<<<'SQL'
345
            ALTER TABLE stu_rump_module_level ADD module_mandatory_11 SMALLINT NOT NULL DEFAULT 0
346
        SQL);
347
        $this->addSql(<<<'SQL'
348
            ALTER TABLE stu_rump_module_level ADD module_level_11_min SMALLINT NOT NULL DEFAULT 0
349
        SQL);
350
        $this->addSql(<<<'SQL'
351
            ALTER TABLE stu_rump_module_level ADD module_level_11_max SMALLINT NOT NULL DEFAULT 0
352
        SQL);
353
        $this->addSql(<<<'SQL'
354
            ALTER TABLE stu_rump_module_level ADD module_level_10 SMALLINT NOT NULL DEFAULT 0
355
        SQL);
356
        $this->addSql(<<<'SQL'
357
            ALTER TABLE stu_rump_module_level ADD module_mandatory_10 SMALLINT NOT NULL DEFAULT 0
358
        SQL);
359
        $this->addSql(<<<'SQL'
360
            ALTER TABLE stu_rump_module_level ADD module_level_10_min SMALLINT NOT NULL DEFAULT 0
361
        SQL);
362
        $this->addSql(<<<'SQL'
363
            ALTER TABLE stu_rump_module_level ADD module_level_10_max SMALLINT NOT NULL DEFAULT 0
364
        SQL);
365
    }
366
}
367