Skip to content

Commit b313bee

Browse files
committed
Finish metadata refactoring migration with restoring of versions in down() path
1 parent 1edc6ad commit b313bee

File tree

1 file changed

+83
-3
lines changed

1 file changed

+83
-3
lines changed

migrations/Version20260120114538.php

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public function down(Schema $schema): void
2929
$this->createVersionTableFields();
3030
$this->createVersionLinkTables();
3131
$this->revertVersionTableColumns();
32+
$this->fillVersionTables();
3233
$this->dropCurrentMetadataColumnFromVersionTable();
3334
$this->dropMetadataTables();
3435
}
@@ -454,7 +455,7 @@ private function dropVersionTableFields(): void
454455
private function createVersionTableFields(): void
455456
{
456457
$this->addSql(<<<'SQL'
457-
ALTER TABLE version ADD package_name VARCHAR(255) NOT NULL
458+
ALTER TABLE version ADD package_name VARCHAR(255) DEFAULT NULL
458459
SQL);
459460
$this->addSql(<<<'SQL'
460461
ALTER TABLE version ADD description TEXT DEFAULT NULL
@@ -466,7 +467,7 @@ private function createVersionTableFields(): void
466467
ALTER TABLE version ADD homepage VARCHAR(255) DEFAULT NULL
467468
SQL);
468469
$this->addSql(<<<'SQL'
469-
ALTER TABLE version ADD license JSON NOT NULL
470+
ALTER TABLE version ADD license JSON DEFAULT NULL
470471
SQL);
471472
$this->addSql(<<<'SQL'
472473
ALTER TABLE version ADD type VARCHAR(255) DEFAULT NULL
@@ -481,7 +482,7 @@ private function createVersionTableFields(): void
481482
ALTER TABLE version ADD dist JSON DEFAULT NULL
482483
SQL);
483484
$this->addSql(<<<'SQL'
484-
ALTER TABLE version ADD autoload JSON NOT NULL
485+
ALTER TABLE version ADD autoload JSON DEFAULT NULL
485486
SQL);
486487
$this->addSql(<<<'SQL'
487488
ALTER TABLE version ADD binaries JSON DEFAULT NULL
@@ -507,6 +508,41 @@ private function createVersionTableFields(): void
507508
$this->addSql(<<<'SQL'
508509
ALTER TABLE version ADD released_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL
509510
SQL);
511+
512+
$this->addSql(<<<'SQL'
513+
UPDATE version
514+
SET
515+
package_name = metadata.package_name,
516+
description = metadata.description,
517+
readme = metadata.readme,
518+
homepage = metadata.homepage,
519+
license = metadata.license,
520+
type = metadata.type,
521+
target_dir = metadata.target_dir,
522+
source = metadata.source,
523+
dist = metadata.dist,
524+
autoload = metadata.autoload,
525+
binaries = metadata.binaries,
526+
include_paths = metadata.include_paths,
527+
php_ext = metadata.php_ext,
528+
authors = metadata.authors,
529+
support = metadata.support,
530+
funding = metadata.funding,
531+
extra = metadata.extra,
532+
released_at = metadata.released_at
533+
FROM metadata
534+
WHERE version.current_metadata_id = metadata.id
535+
SQL);
536+
537+
$this->addSql(<<<'SQL'
538+
ALTER TABLE version ALTER COLUMN package_name SET NOT NULL
539+
SQL);
540+
$this->addSql(<<<'SQL'
541+
ALTER TABLE version ALTER COLUMN license SET NOT NULL
542+
SQL);
543+
$this->addSql(<<<'SQL'
544+
ALTER TABLE version ALTER COLUMN autoload SET NOT NULL
545+
SQL);
510546
}
511547

512548
private function createVersionLinkTables(): void
@@ -678,6 +714,50 @@ private function revertVersionTableColumns(): void
678714
SQL);
679715
}
680716

717+
private function fillVersionTables(): void
718+
{
719+
$this->addSql(<<<'SQL'
720+
UPDATE version
721+
SET
722+
description = metadata.description,
723+
readme = metadata.readme,
724+
homepage = metadata.homepage,
725+
license = metadata.license,
726+
type = metadata.type,
727+
target_dir = metadata.target_dir,
728+
source = metadata.source,
729+
dist = metadata.dist,
730+
autoload = metadata.autoload,
731+
binaries = metadata.binaries,
732+
include_paths = metadata.include_paths,
733+
php_ext = metadata.php_ext,
734+
authors = metadata.authors,
735+
support = metadata.support,
736+
funding = metadata.funding,
737+
extra = metadata.extra,
738+
released_at = metadata.released_at
739+
FROM metadata
740+
WHERE version.current_metadata_id = metadata.id
741+
SQL);
742+
743+
$linkTables = ['require', 'dev_require', 'conflict', 'provide', 'replace', 'suggest'];
744+
745+
foreach ($linkTables as $linkTable) {
746+
$this->addSql(<<<SQL
747+
INSERT INTO version_{$linkTable}_link (version_id, linked_package_name, linked_version_constraint)
748+
SELECT version.id, metadata_link.linked_package_name, metadata_link.linked_version_constraint
749+
FROM metadata_{$linkTable}_link metadata_link
750+
INNER JOIN metadata metadata ON metadata_link.metadata_id = metadata.id
751+
INNER JOIN version version ON version.current_metadata_id = metadata.id
752+
WHERE NOT EXISTS (
753+
SELECT 1 FROM version_{$linkTable}_link version_link
754+
WHERE version_link.version_id = metadata.version_id
755+
AND version_link.linked_package_name = metadata_link.linked_package_name
756+
)
757+
SQL);
758+
}
759+
}
760+
681761
private function dropCurrentMetadataColumnFromVersionTable(): void
682762
{
683763
$this->addSql(<<<'SQL'

0 commit comments

Comments
 (0)