Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
341 changes: 341 additions & 0 deletions migrations/Version20260120114538.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,341 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20260120114538 extends AbstractMigration
{
public function getDescription(): string
{
return 'Create metadata tables';
}

public function up(Schema $schema): void
{
$this->createMetadataTables();
$this->fillMetadataTables();
}

public function down(Schema $schema): void
{
$this->dropMetadataTables();
}

private function createMetadataTables(): void
{
$this->addSql(<<<'SQL'
CREATE TABLE metadata (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
revision INT NOT NULL,
package_name VARCHAR(255) NOT NULL,
version_name VARCHAR(255) NOT NULL,
normalized_version_name VARCHAR(191) NOT NULL,
description TEXT DEFAULT NULL,
readme TEXT DEFAULT NULL,
homepage VARCHAR(255) DEFAULT NULL,
license JSON NOT NULL,
type VARCHAR(255) DEFAULT NULL,
target_dir VARCHAR(255) DEFAULT NULL,
source JSON DEFAULT NULL,
dist JSON DEFAULT NULL,
autoload JSON NOT NULL,
binaries JSON DEFAULT NULL,
include_paths JSON DEFAULT NULL,
php_ext JSON DEFAULT NULL,
authors JSON DEFAULT NULL,
support JSON DEFAULT NULL,
funding JSON DEFAULT NULL,
extra JSON DEFAULT NULL,
released_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
last_modified_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
version_id INT NOT NULL,
package_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_4F1434144BBC2705 ON metadata (version_id)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_4F143414F44CABFF ON metadata (package_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_keyword (
metadata_id INT NOT NULL,
keyword_id INT NOT NULL,
PRIMARY KEY (metadata_id, keyword_id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_C8E2A1C3DC9EE959 ON metadata_keyword (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_C8E2A1C3115D4552 ON metadata_keyword (keyword_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_conflict_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_97454B50DC9EE959 ON metadata_conflict_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_dev_require_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_762BA762DC9EE959 ON metadata_dev_require_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_provide_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_571F5289DC9EE959 ON metadata_provide_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_replace_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_C5E02AEFDC9EE959 ON metadata_replace_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_require_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_380D3934DC9EE959 ON metadata_require_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE metadata_suggest_link (
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
linked_package_name VARCHAR(191) NOT NULL,
linked_version_constraint TEXT NOT NULL,
metadata_id INT NOT NULL,
PRIMARY KEY (id)
)
SQL);
$this->addSql(<<<'SQL'
CREATE INDEX IDX_9C8AE50DDC9EE959 ON metadata_suggest_link (metadata_id)
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata
ADD
CONSTRAINT FK_4F143414F44CABFF FOREIGN KEY (package_id) REFERENCES package (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata
ADD
CONSTRAINT FK_4F1434144BBC2705 FOREIGN KEY (version_id) REFERENCES version (id) ON DELETE CASCADE NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_keyword
ADD
CONSTRAINT FK_C8E2A1C3DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) ON DELETE CASCADE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_keyword
ADD
CONSTRAINT FK_C8E2A1C3115D4552 FOREIGN KEY (keyword_id) REFERENCES keyword (id) ON DELETE CASCADE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_conflict_link
ADD
CONSTRAINT FK_97454B50DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_dev_require_link
ADD
CONSTRAINT FK_762BA762DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_provide_link
ADD
CONSTRAINT FK_571F5289DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_replace_link
ADD
CONSTRAINT FK_C5E02AEFDC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_require_link
ADD
CONSTRAINT FK_380D3934DC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE
metadata_suggest_link
ADD
CONSTRAINT FK_9C8AE50DDC9EE959 FOREIGN KEY (metadata_id) REFERENCES metadata (id) NOT DEFERRABLE
SQL);
}

private function fillMetadataTables(): void
{
$this->addSql(<<<'SQL'
INSERT INTO metadata (
revision,
package_name,
version_name,
normalized_version_name,
description,
readme,
homepage,
license,
type,
target_dir,
source,
dist,
autoload,
binaries,
include_paths,
php_ext,
authors,
support,
funding,
extra,
released_at,
created_at,
version_id,
package_id
)
SELECT
1,
name,
version,
normalized_version,
description,
readme,
homepage,
license,
type,
target_dir,
source,
dist,
autoload,
binaries,
include_paths,
php_ext,
authors,
support,
funding,
extra,
released_at,
CURRENT_DATE,
id,
package_id
FROM version
WHERE NOT EXISTS (SELECT 1 FROM metadata WHERE metadata.version_id = version.id)
SQL);

$linkTables = ['require', 'dev_require', 'conflict', 'provide', 'replace', 'suggest'];

foreach ($linkTables as $linkTable) {
$this->addSql(<<<SQL
INSERT INTO metadata_{$linkTable}_link (metadata_id, linked_package_name, linked_version_constraint)
SELECT metadata.id, link.linked_package_name, link.linked_version_constraint
FROM version_{$linkTable}_link link
INNER JOIN metadata metadata ON link.version_id = metadata.version_id
SQL);
}
}

private function dropMetadataTables(): void
{
$this->addSql(<<<'SQL'
ALTER TABLE metadata DROP CONSTRAINT FK_4F1434144BBC2705
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata DROP CONSTRAINT FK_4F143414F44CABFF
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_keyword DROP CONSTRAINT FK_C8E2A1C3DC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_keyword DROP CONSTRAINT FK_C8E2A1C3115D4552
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_conflict_link DROP CONSTRAINT FK_97454B50DC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_dev_require_link DROP CONSTRAINT FK_762BA762DC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_provide_link DROP CONSTRAINT FK_571F5289DC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_replace_link DROP CONSTRAINT FK_C5E02AEFDC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_require_link DROP CONSTRAINT FK_380D3934DC9EE959
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE metadata_suggest_link DROP CONSTRAINT FK_9C8AE50DDC9EE959
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_keyword
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_conflict_link
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_dev_require_link
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_provide_link
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_replace_link
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_require_link
SQL);
$this->addSql(<<<'SQL'
DROP TABLE metadata_suggest_link
SQL);
}
}
Loading
Loading