Skip to content

Commit 60c02c3

Browse files
committed
Finish metadata refactoring migration with restoring of versions in down() path
Signed-off-by: Tim Goudriaan <tim@codedmonkey.com>
1 parent 1edc6ad commit 60c02c3

File tree

1 file changed

+66
-3
lines changed

1 file changed

+66
-3
lines changed

migrations/Version20260120114538.php

Lines changed: 66 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,26 @@ 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+
license = metadata.license,
517+
autoload = metadata.autoload,
518+
FROM metadata
519+
WHERE version.current_metadata_id = metadata.id
520+
SQL);
521+
522+
$this->addSql(<<<'SQL'
523+
ALTER TABLE version ALTER COLUMN package_name SET NOT NULL
524+
SQL);
525+
$this->addSql(<<<'SQL'
526+
ALTER TABLE version ALTER COLUMN license SET NOT NULL
527+
SQL);
528+
$this->addSql(<<<'SQL'
529+
ALTER TABLE version ALTER COLUMN autoload SET NOT NULL
530+
SQL);
510531
}
511532

512533
private function createVersionLinkTables(): void
@@ -678,6 +699,48 @@ private function revertVersionTableColumns(): void
678699
SQL);
679700
}
680701

702+
private function fillVersionTables(): void
703+
{
704+
$this->addSql(<<<'SQL'
705+
UPDATE version
706+
SET
707+
description = metadata.description,
708+
readme = metadata.readme,
709+
homepage = metadata.homepage,
710+
type = metadata.type,
711+
target_dir = metadata.target_dir,
712+
source = metadata.source,
713+
dist = metadata.dist,
714+
binaries = metadata.binaries,
715+
include_paths = metadata.include_paths,
716+
php_ext = metadata.php_ext,
717+
authors = metadata.authors,
718+
support = metadata.support,
719+
funding = metadata.funding,
720+
extra = metadata.extra,
721+
released_at = metadata.released_at
722+
FROM metadata
723+
WHERE version.current_metadata_id = metadata.id
724+
SQL);
725+
726+
$linkTables = ['require', 'dev_require', 'conflict', 'provide', 'replace', 'suggest'];
727+
728+
foreach ($linkTables as $linkTable) {
729+
$this->addSql(<<<SQL
730+
INSERT INTO version_{$linkTable}_link (version_id, linked_package_name, linked_version_constraint)
731+
SELECT version.id, metadata_link.linked_package_name, metadata_link.linked_version_constraint
732+
FROM metadata_{$linkTable}_link metadata_link
733+
INNER JOIN metadata metadata ON metadata_link.metadata_id = metadata.id
734+
INNER JOIN version version ON version.current_metadata_id = metadata.id
735+
WHERE NOT EXISTS (
736+
SELECT 1 FROM version_{$linkTable}_link version_link
737+
WHERE version_link.version_id = metadata.version_id
738+
AND version_link.linked_package_name = metadata_link.linked_package_name
739+
)
740+
SQL);
741+
}
742+
}
743+
681744
private function dropCurrentMetadataColumnFromVersionTable(): void
682745
{
683746
$this->addSql(<<<'SQL'

0 commit comments

Comments
 (0)