Skip to content

Commit e780ec0

Browse files
committed
Create metadata entities
Start of refactoring package metadata by separating package metadata from the version table to a new metadata table to create immutable packages
1 parent 2c9bc36 commit e780ec0

11 files changed

Lines changed: 1198 additions & 0 deletions
Lines changed: 341 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,341 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DoctrineMigrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
final class Version20260120114538 extends AbstractMigration
11+
{
12+
public function getDescription(): string
13+
{
14+
return 'Create metadata tables';
15+
}
16+
17+
public function up(Schema $schema): void
18+
{
19+
$this->createMetadataTables();
20+
$this->fillMetadataTables();
21+
}
22+
23+
public function down(Schema $schema): void
24+
{
25+
$this->dropMetadataTables();
26+
}
27+
28+
private function createMetadataTables(): void
29+
{
30+
$this->addSql(<<<'SQL'
31+
CREATE TABLE metadata (
32+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
33+
release_version INT NOT NULL,
34+
package_name VARCHAR(255) NOT NULL,
35+
version_name VARCHAR(255) NOT NULL,
36+
normalized_version_name VARCHAR(191) NOT NULL,
37+
description TEXT DEFAULT NULL,
38+
readme TEXT DEFAULT NULL,
39+
homepage VARCHAR(255) DEFAULT NULL,
40+
license JSON NOT NULL,
41+
type VARCHAR(255) DEFAULT NULL,
42+
target_dir VARCHAR(255) DEFAULT NULL,
43+
source JSON DEFAULT NULL,
44+
dist JSON DEFAULT NULL,
45+
autoload JSON NOT NULL,
46+
binaries JSON DEFAULT NULL,
47+
include_paths JSON DEFAULT NULL,
48+
php_ext JSON DEFAULT NULL,
49+
authors JSON DEFAULT NULL,
50+
support JSON DEFAULT NULL,
51+
funding JSON DEFAULT NULL,
52+
extra JSON DEFAULT NULL,
53+
released_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
54+
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
55+
last_modified_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
56+
version_id INT NOT NULL,
57+
package_id INT NOT NULL,
58+
PRIMARY KEY (id)
59+
)
60+
SQL);
61+
$this->addSql(<<<'SQL'
62+
CREATE INDEX IDX_4F1434144BBC2705 ON metadata (version_id)
63+
SQL);
64+
$this->addSql(<<<'SQL'
65+
CREATE INDEX IDX_4F143414F44CABFF ON metadata (package_id)
66+
SQL);
67+
$this->addSql(<<<'SQL'
68+
CREATE TABLE metadata_keyword (
69+
metadata_id INT NOT NULL,
70+
keyword_id INT NOT NULL,
71+
PRIMARY KEY (metadata_id, keyword_id)
72+
)
73+
SQL);
74+
$this->addSql(<<<'SQL'
75+
CREATE INDEX IDX_C8E2A1C3DC9EE959 ON metadata_keyword (metadata_id)
76+
SQL);
77+
$this->addSql(<<<'SQL'
78+
CREATE INDEX IDX_C8E2A1C3115D4552 ON metadata_keyword (keyword_id)
79+
SQL);
80+
$this->addSql(<<<'SQL'
81+
CREATE TABLE metadata_conflict_link (
82+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
83+
linked_package_name VARCHAR(191) NOT NULL,
84+
linked_version_constraint TEXT NOT NULL,
85+
metadata_id INT NOT NULL,
86+
PRIMARY KEY (id)
87+
)
88+
SQL);
89+
$this->addSql(<<<'SQL'
90+
CREATE INDEX IDX_97454B50DC9EE959 ON metadata_conflict_link (metadata_id)
91+
SQL);
92+
$this->addSql(<<<'SQL'
93+
CREATE TABLE metadata_dev_require_link (
94+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
95+
linked_package_name VARCHAR(191) NOT NULL,
96+
linked_version_constraint TEXT NOT NULL,
97+
metadata_id INT NOT NULL,
98+
PRIMARY KEY (id)
99+
)
100+
SQL);
101+
$this->addSql(<<<'SQL'
102+
CREATE INDEX IDX_762BA762DC9EE959 ON metadata_dev_require_link (metadata_id)
103+
SQL);
104+
$this->addSql(<<<'SQL'
105+
CREATE TABLE metadata_provide_link (
106+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
107+
linked_package_name VARCHAR(191) NOT NULL,
108+
linked_version_constraint TEXT NOT NULL,
109+
metadata_id INT NOT NULL,
110+
PRIMARY KEY (id)
111+
)
112+
SQL);
113+
$this->addSql(<<<'SQL'
114+
CREATE INDEX IDX_571F5289DC9EE959 ON metadata_provide_link (metadata_id)
115+
SQL);
116+
$this->addSql(<<<'SQL'
117+
CREATE TABLE metadata_replace_link (
118+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
119+
linked_package_name VARCHAR(191) NOT NULL,
120+
linked_version_constraint TEXT NOT NULL,
121+
metadata_id INT NOT NULL,
122+
PRIMARY KEY (id)
123+
)
124+
SQL);
125+
$this->addSql(<<<'SQL'
126+
CREATE INDEX IDX_C5E02AEFDC9EE959 ON metadata_replace_link (metadata_id)
127+
SQL);
128+
$this->addSql(<<<'SQL'
129+
CREATE TABLE metadata_require_link (
130+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
131+
linked_package_name VARCHAR(191) NOT NULL,
132+
linked_version_constraint TEXT NOT NULL,
133+
metadata_id INT NOT NULL,
134+
PRIMARY KEY (id)
135+
)
136+
SQL);
137+
$this->addSql(<<<'SQL'
138+
CREATE INDEX IDX_380D3934DC9EE959 ON metadata_require_link (metadata_id)
139+
SQL);
140+
$this->addSql(<<<'SQL'
141+
CREATE TABLE metadata_suggest_link (
142+
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
143+
linked_package_name VARCHAR(191) NOT NULL,
144+
linked_version_constraint TEXT NOT NULL,
145+
metadata_id INT NOT NULL,
146+
PRIMARY KEY (id)
147+
)
148+
SQL);
149+
$this->addSql(<<<'SQL'
150+
CREATE INDEX IDX_9C8AE50DDC9EE959 ON metadata_suggest_link (metadata_id)
151+
SQL);
152+
$this->addSql(<<<'SQL'
153+
ALTER TABLE
154+
metadata
155+
ADD
156+
CONSTRAINT FK_4F143414F44CABFF FOREIGN KEY (package_id) REFERENCES package (id) ON DELETE CASCADE NOT DEFERRABLE
157+
SQL);
158+
$this->addSql(<<<'SQL'
159+
ALTER TABLE
160+
metadata
161+
ADD
162+
CONSTRAINT FK_4F1434144BBC2705 FOREIGN KEY (version_id) REFERENCES version (id) ON DELETE CASCADE NOT DEFERRABLE
163+
SQL);
164+
$this->addSql(<<<'SQL'
165+
ALTER TABLE
166+
metadata_keyword
167+
ADD
168+
CONSTRAINT FK_C8E2A1C3DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) ON DELETE CASCADE
169+
SQL);
170+
$this->addSql(<<<'SQL'
171+
ALTER TABLE
172+
metadata_keyword
173+
ADD
174+
CONSTRAINT FK_C8E2A1C3115D4552 FOREIGN KEY (keyword_id) REFERENCES keyword (id) ON DELETE CASCADE
175+
SQL);
176+
$this->addSql(<<<'SQL'
177+
ALTER TABLE
178+
metadata_conflict_link
179+
ADD
180+
CONSTRAINT FK_97454B50DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
181+
SQL);
182+
$this->addSql(<<<'SQL'
183+
ALTER TABLE
184+
metadata_dev_require_link
185+
ADD
186+
CONSTRAINT FK_762BA762DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
187+
SQL);
188+
$this->addSql(<<<'SQL'
189+
ALTER TABLE
190+
metadata_provide_link
191+
ADD
192+
CONSTRAINT FK_571F5289DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
193+
SQL);
194+
$this->addSql(<<<'SQL'
195+
ALTER TABLE
196+
metadata_replace_link
197+
ADD
198+
CONSTRAINT FK_C5E02AEFDC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
199+
SQL);
200+
$this->addSql(<<<'SQL'
201+
ALTER TABLE
202+
metadata_require_link
203+
ADD
204+
CONSTRAINT FK_380D3934DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
205+
SQL);
206+
$this->addSql(<<<'SQL'
207+
ALTER TABLE
208+
metadata_suggest_link
209+
ADD
210+
CONSTRAINT FK_9C8AE50DDC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
211+
SQL);
212+
}
213+
214+
private function fillMetadataTables(): void
215+
{
216+
$this->addSql(<<<'SQL'
217+
INSERT INTO metadata (
218+
release_version,
219+
package_name,
220+
version_name,
221+
normalized_version_name,
222+
description,
223+
readme,
224+
homepage,
225+
license,
226+
type,
227+
target_dir,
228+
source,
229+
dist,
230+
autoload,
231+
binaries,
232+
include_paths,
233+
php_ext,
234+
authors,
235+
support,
236+
funding,
237+
extra,
238+
released_at,
239+
created_at,
240+
version_id,
241+
package_id
242+
)
243+
SELECT
244+
1,
245+
name,
246+
version,
247+
normalized_version,
248+
description,
249+
readme,
250+
homepage,
251+
license,
252+
type,
253+
target_dir,
254+
source,
255+
dist,
256+
autoload,
257+
binaries,
258+
include_paths,
259+
php_ext,
260+
authors,
261+
support,
262+
funding,
263+
extra,
264+
released_at,
265+
CURRENT_DATE,
266+
id,
267+
package_id
268+
FROM version
269+
WHERE NOT EXISTS (SELECT 1 FROM metadata WHERE metadata.version_id = version.id)
270+
SQL);
271+
272+
$linkTables = ['require', 'dev_require', 'conflict', 'provide', 'replace', 'suggest'];
273+
274+
foreach ($linkTables as $linkTable) {
275+
$this->addSql(<<<SQL
276+
INSERT INTO metadata_{$linkTable}_link (metadata_id, linked_package_name, linked_version_constraint)
277+
SELECT metadata.id, link.linked_package_name, link.linked_version_constraint
278+
FROM version_{$linkTable}_link link
279+
INNER JOIN metadata metadata ON link.version_id = metadata.version_id
280+
SQL);
281+
}
282+
}
283+
284+
private function dropMetadataTables(): void
285+
{
286+
$this->addSql(<<<'SQL'
287+
ALTER TABLE metadata DROP CONSTRAINT FK_4F1434144BBC2705
288+
SQL);
289+
$this->addSql(<<<'SQL'
290+
ALTER TABLE metadata DROP CONSTRAINT FK_4F143414F44CABFF
291+
SQL);
292+
$this->addSql(<<<'SQL'
293+
ALTER TABLE metadata_keyword DROP CONSTRAINT FK_C8E2A1C3DC9EE959
294+
SQL);
295+
$this->addSql(<<<'SQL'
296+
ALTER TABLE metadata_keyword DROP CONSTRAINT FK_C8E2A1C3115D4552
297+
SQL);
298+
$this->addSql(<<<'SQL'
299+
ALTER TABLE metadata_conflict_link DROP CONSTRAINT FK_97454B50DC9EE959
300+
SQL);
301+
$this->addSql(<<<'SQL'
302+
ALTER TABLE metadata_dev_require_link DROP CONSTRAINT FK_762BA762DC9EE959
303+
SQL);
304+
$this->addSql(<<<'SQL'
305+
ALTER TABLE metadata_provide_link DROP CONSTRAINT FK_571F5289DC9EE959
306+
SQL);
307+
$this->addSql(<<<'SQL'
308+
ALTER TABLE metadata_replace_link DROP CONSTRAINT FK_C5E02AEFDC9EE959
309+
SQL);
310+
$this->addSql(<<<'SQL'
311+
ALTER TABLE metadata_require_link DROP CONSTRAINT FK_380D3934DC9EE959
312+
SQL);
313+
$this->addSql(<<<'SQL'
314+
ALTER TABLE metadata_suggest_link DROP CONSTRAINT FK_9C8AE50DDC9EE959
315+
SQL);
316+
$this->addSql(<<<'SQL'
317+
DROP TABLE metadata
318+
SQL);
319+
$this->addSql(<<<'SQL'
320+
DROP TABLE metadata_keyword
321+
SQL);
322+
$this->addSql(<<<'SQL'
323+
DROP TABLE metadata_conflict_link
324+
SQL);
325+
$this->addSql(<<<'SQL'
326+
DROP TABLE metadata_dev_require_link
327+
SQL);
328+
$this->addSql(<<<'SQL'
329+
DROP TABLE metadata_provide_link
330+
SQL);
331+
$this->addSql(<<<'SQL'
332+
DROP TABLE metadata_replace_link
333+
SQL);
334+
$this->addSql(<<<'SQL'
335+
DROP TABLE metadata_require_link
336+
SQL);
337+
$this->addSql(<<<'SQL'
338+
DROP TABLE metadata_suggest_link
339+
SQL);
340+
}
341+
}

0 commit comments

Comments
 (0)