Skip to content

Commit cebdcb5

Browse files
committed
Create generalized package link entities
1 parent f58804c commit cebdcb5

9 files changed

Lines changed: 481 additions & 45 deletions

File tree

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
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 Version20250319194658 extends AbstractMigration
11+
{
12+
public function getDescription(): string
13+
{
14+
return 'Add generalized package link tables';
15+
}
16+
17+
public function up(Schema $schema): void
18+
{
19+
$this->addSql(<<<'SQL'
20+
CREATE TABLE dependent (dependent_package_name VARCHAR(191) NOT NULL, dev_dependency BOOLEAN NOT NULL, package_id INT NOT NULL, PRIMARY KEY(package_id, dependent_package_name, dev_dependency))
21+
SQL);
22+
$this->addSql(<<<'SQL'
23+
CREATE INDEX IDX_BB9077A4F44CABFF ON dependent (package_id)
24+
SQL);
25+
$this->addSql(<<<'SQL'
26+
CREATE TABLE provider (provided_package_name VARCHAR(191) NOT NULL, implementation BOOLEAN NOT NULL, package_id INT NOT NULL, PRIMARY KEY(package_id, provided_package_name, implementation))
27+
SQL);
28+
$this->addSql(<<<'SQL'
29+
CREATE INDEX IDX_92C4739CF44CABFF ON provider (package_id)
30+
SQL);
31+
$this->addSql(<<<'SQL'
32+
CREATE TABLE suggester (suggested_package_name VARCHAR(191) NOT NULL, package_id INT NOT NULL, PRIMARY KEY(package_id, suggested_package_name))
33+
SQL);
34+
$this->addSql(<<<'SQL'
35+
CREATE INDEX IDX_4D5681F2F44CABFF ON suggester (package_id)
36+
SQL);
37+
$this->addSql(<<<'SQL'
38+
ALTER TABLE dependent ADD CONSTRAINT FK_BB9077A4F44CABFF FOREIGN KEY (package_id) REFERENCES package (id) NOT DEFERRABLE INITIALLY IMMEDIATE
39+
SQL);
40+
$this->addSql(<<<'SQL'
41+
ALTER TABLE provider ADD CONSTRAINT FK_92C4739CF44CABFF FOREIGN KEY (package_id) REFERENCES package (id) NOT DEFERRABLE INITIALLY IMMEDIATE
42+
SQL);
43+
$this->addSql(<<<'SQL'
44+
ALTER TABLE suggester ADD CONSTRAINT FK_4D5681F2F44CABFF FOREIGN KEY (package_id) REFERENCES package (id) NOT DEFERRABLE INITIALLY IMMEDIATE
45+
SQL);
46+
$this->addSql(<<<'SQL'
47+
ALTER TABLE conflict_link RENAME COLUMN package_name TO linked_package_name
48+
SQL);
49+
$this->addSql(<<<'SQL'
50+
ALTER TABLE conflict_link ALTER linked_package_name TYPE VARCHAR(191)
51+
SQL);
52+
$this->addSql(<<<'SQL'
53+
ALTER TABLE conflict_link RENAME COLUMN package_version TO linked_version_constraint
54+
SQL);
55+
$this->addSql(<<<'SQL'
56+
ALTER TABLE conflict_link ALTER linked_version_constraint TYPE TEXT
57+
SQL);
58+
$this->addSql(<<<'SQL'
59+
ALTER TABLE dev_require_link RENAME COLUMN package_name TO linked_package_name
60+
SQL);
61+
$this->addSql(<<<'SQL'
62+
ALTER TABLE dev_require_link ALTER linked_package_name TYPE VARCHAR(191)
63+
SQL);
64+
$this->addSql(<<<'SQL'
65+
ALTER TABLE dev_require_link RENAME COLUMN package_version TO linked_version_constraint
66+
SQL);
67+
$this->addSql(<<<'SQL'
68+
ALTER TABLE dev_require_link ALTER linked_version_constraint TYPE TEXT
69+
SQL);
70+
$this->addSql(<<<'SQL'
71+
ALTER TABLE provide_link RENAME COLUMN package_name TO linked_package_name
72+
SQL);
73+
$this->addSql(<<<'SQL'
74+
ALTER TABLE provide_link ALTER linked_package_name TYPE VARCHAR(191)
75+
SQL);
76+
$this->addSql(<<<'SQL'
77+
ALTER TABLE provide_link RENAME COLUMN package_version TO linked_version_constraint
78+
SQL);
79+
$this->addSql(<<<'SQL'
80+
ALTER TABLE provide_link ALTER linked_version_constraint TYPE TEXT
81+
SQL);
82+
$this->addSql(<<<'SQL'
83+
ALTER TABLE replace_link RENAME COLUMN package_name TO linked_package_name
84+
SQL);
85+
$this->addSql(<<<'SQL'
86+
ALTER TABLE replace_link ALTER linked_package_name TYPE VARCHAR(191)
87+
SQL);
88+
$this->addSql(<<<'SQL'
89+
ALTER TABLE replace_link RENAME COLUMN package_version TO linked_version_constraint
90+
SQL);
91+
$this->addSql(<<<'SQL'
92+
ALTER TABLE replace_link ALTER linked_version_constraint TYPE TEXT
93+
SQL);
94+
$this->addSql(<<<'SQL'
95+
ALTER TABLE require_link RENAME COLUMN package_name TO linked_package_name
96+
SQL);
97+
$this->addSql(<<<'SQL'
98+
ALTER TABLE require_link ALTER linked_package_name TYPE VARCHAR(191)
99+
SQL);
100+
$this->addSql(<<<'SQL'
101+
ALTER TABLE require_link RENAME COLUMN package_version TO linked_version_constraint
102+
SQL);
103+
$this->addSql(<<<'SQL'
104+
ALTER TABLE require_link ALTER linked_version_constraint TYPE TEXT
105+
SQL);
106+
$this->addSql(<<<'SQL'
107+
ALTER TABLE suggest_link RENAME COLUMN package_name TO linked_package_name
108+
SQL);
109+
$this->addSql(<<<'SQL'
110+
ALTER TABLE suggest_link ALTER linked_package_name TYPE VARCHAR(191)
111+
SQL);
112+
$this->addSql(<<<'SQL'
113+
ALTER TABLE suggest_link RENAME COLUMN package_version TO linked_version_constraint
114+
SQL);
115+
$this->addSql(<<<'SQL'
116+
ALTER TABLE suggest_link ALTER linked_version_constraint TYPE TEXT
117+
SQL);
118+
}
119+
120+
public function down(Schema $schema): void
121+
{
122+
$this->addSql(<<<'SQL'
123+
ALTER TABLE dependent DROP CONSTRAINT FK_BB9077A4F44CABFF
124+
SQL);
125+
$this->addSql(<<<'SQL'
126+
ALTER TABLE provider DROP CONSTRAINT FK_92C4739CF44CABFF
127+
SQL);
128+
$this->addSql(<<<'SQL'
129+
ALTER TABLE suggester DROP CONSTRAINT FK_4D5681F2F44CABFF
130+
SQL);
131+
$this->addSql(<<<'SQL'
132+
DROP TABLE dependent
133+
SQL);
134+
$this->addSql(<<<'SQL'
135+
DROP TABLE provider
136+
SQL);
137+
$this->addSql(<<<'SQL'
138+
DROP TABLE suggester
139+
SQL);
140+
$this->addSql(<<<'SQL'
141+
ALTER TABLE conflict_link RENAME COLUMN linked_package_name TO package_name
142+
SQL);
143+
$this->addSql(<<<'SQL'
144+
ALTER TABLE conflict_link ALTER package_name TYPE VARCHAR(191)
145+
SQL);
146+
$this->addSql(<<<'SQL'
147+
ALTER TABLE conflict_link RENAME COLUMN linked_version_constraint TO package_version
148+
SQL);
149+
$this->addSql(<<<'SQL'
150+
ALTER TABLE conflict_link ALTER package_version TYPE TEXT
151+
SQL);
152+
$this->addSql(<<<'SQL'
153+
ALTER TABLE suggest_link RENAME COLUMN linked_package_name TO package_name
154+
SQL);
155+
$this->addSql(<<<'SQL'
156+
ALTER TABLE suggest_link ALTER package_name TYPE VARCHAR(191)
157+
SQL);
158+
$this->addSql(<<<'SQL'
159+
ALTER TABLE suggest_link RENAME COLUMN linked_version_constraint TO package_version
160+
SQL);
161+
$this->addSql(<<<'SQL'
162+
ALTER TABLE suggest_link ALTER package_version TYPE TEXT
163+
SQL);
164+
$this->addSql(<<<'SQL'
165+
ALTER TABLE dev_require_link RENAME COLUMN linked_package_name TO package_name
166+
SQL);
167+
$this->addSql(<<<'SQL'
168+
ALTER TABLE dev_require_link ALTER package_name TYPE VARCHAR(191)
169+
SQL);
170+
$this->addSql(<<<'SQL'
171+
ALTER TABLE dev_require_link RENAME COLUMN linked_version_constraint TO package_version
172+
SQL);
173+
$this->addSql(<<<'SQL'
174+
ALTER TABLE dev_require_link ALTER package_version TYPE TEXT
175+
SQL);
176+
$this->addSql(<<<'SQL'
177+
ALTER TABLE provide_link RENAME COLUMN linked_package_name TO package_name
178+
SQL);
179+
$this->addSql(<<<'SQL'
180+
ALTER TABLE provide_link ALTER package_name TYPE VARCHAR(191)
181+
SQL);
182+
$this->addSql(<<<'SQL'
183+
ALTER TABLE provide_link RENAME COLUMN linked_version_constraint TO package_version
184+
SQL);
185+
$this->addSql(<<<'SQL'
186+
ALTER TABLE provide_link ALTER package_version TYPE TEXT
187+
SQL);
188+
$this->addSql(<<<'SQL'
189+
ALTER TABLE replace_link RENAME COLUMN linked_package_name TO package_name
190+
SQL);
191+
$this->addSql(<<<'SQL'
192+
ALTER TABLE replace_link ALTER package_name TYPE VARCHAR(191)
193+
SQL);
194+
$this->addSql(<<<'SQL'
195+
ALTER TABLE replace_link RENAME COLUMN linked_version_constraint TO package_version
196+
SQL);
197+
$this->addSql(<<<'SQL'
198+
ALTER TABLE replace_link ALTER package_version TYPE TEXT
199+
SQL);
200+
$this->addSql(<<<'SQL'
201+
ALTER TABLE require_link RENAME COLUMN linked_package_name TO package_name
202+
SQL);
203+
$this->addSql(<<<'SQL'
204+
ALTER TABLE require_link ALTER package_name TYPE VARCHAR(191)
205+
SQL);
206+
$this->addSql(<<<'SQL'
207+
ALTER TABLE require_link RENAME COLUMN linked_version_constraint TO package_version
208+
SQL);
209+
$this->addSql(<<<'SQL'
210+
ALTER TABLE require_link ALTER package_version TYPE TEXT
211+
SQL);
212+
}
213+
}

phpstan.dist.neon

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ parameters:
1010
excludePaths:
1111
- tests/bootstrap.php
1212
ignoreErrors:
13+
- '#^CodedMonkey\\Dirigent\\Doctrine\Entity\\PackageLink given.$#'
1314
- '#^Property CodedMonkey\\Dirigent\\Doctrine\\Entity\\[a-zA-Z]+\:\:\$id \(int\|null\) is never assigned int so it can be removed from the property type\.$#'
1415
-
1516
message: '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
@@ -31,3 +32,8 @@ parameters:
3132
identifier: property.onlyWritten
3233
count: 1
3334
path: src/EventListener/EncryptionListener.php
35+
-
36+
message: '#^PHPDoc tag @var with type CodedMonkey\\Dirigent\\Doctrine\\Entity\\PackageLink is not subtype of native type#'
37+
identifier: varTag.nativeType
38+
count: 1
39+
path: src/Package/PackageMetadataResolver.php

src/Doctrine/Entity/Dependent.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Doctrine\Entity;
4+
5+
use Doctrine\ORM\Mapping as ORM;
6+
7+
#[ORM\Entity]
8+
class Dependent
9+
{
10+
#[ORM\Id, ORM\ManyToOne(targetEntity: Package::class), ORM\JoinColumn(nullable: false)]
11+
private ?Package $package = null;
12+
13+
#[ORM\Id, ORM\Column(length: 191)]
14+
private string $dependentPackageName;
15+
16+
#[ORM\Id, ORM\Column]
17+
private bool $devDependency;
18+
19+
public function getPackage(): ?Package
20+
{
21+
return $this->package;
22+
}
23+
24+
public function setPackage(Package $package): static
25+
{
26+
$this->package = $package;
27+
28+
return $this;
29+
}
30+
31+
public function getDependentPackageName(): string
32+
{
33+
return $this->dependentPackageName;
34+
}
35+
36+
public function setDependentPackageName(string $packageName): static
37+
{
38+
$this->dependentPackageName = $packageName;
39+
40+
return $this;
41+
}
42+
43+
public function isDevDependency(): bool
44+
{
45+
return $this->devDependency;
46+
}
47+
48+
public function setDevDependency(bool $devDependency): static
49+
{
50+
$this->devDependency = $devDependency;
51+
52+
return $this;
53+
}
54+
}

src/Doctrine/Entity/PackageLink.php

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,58 +13,46 @@ abstract class PackageLink
1313
#[ORM\GeneratedValue]
1414
private ?int $id = null;
1515

16+
protected Version $version;
17+
1618
#[ORM\Column(length: 191)]
17-
private string $packageName;
19+
private string $linkedPackageName;
1820

1921
#[ORM\Column(type: Types::TEXT)]
20-
private string $packageVersion;
21-
22-
/**
23-
* Base property holding the version - this must remain protected since it
24-
* is redefined with an attribute in the child class.
25-
*/
26-
protected Version $version;
22+
private string $linkedVersionConstraint;
2723

2824
public function getId(): ?int
2925
{
3026
return $this->id;
3127
}
3228

33-
public function getPackageName(): string
34-
{
35-
return $this->packageName;
36-
}
37-
38-
public function setPackageName(string $packageName): void
29+
public function getVersion(): Version
3930
{
40-
$this->packageName = $packageName;
31+
return $this->version;
4132
}
4233

43-
public function getPackageVersion(): string
34+
public function setVersion(Version $version): void
4435
{
45-
return $this->packageVersion;
36+
$this->version = $version;
4637
}
4738

48-
public function setPackageVersion(string $packageVersion): void
39+
public function getLinkedPackageName(): string
4940
{
50-
$this->packageVersion = $packageVersion;
41+
return $this->linkedPackageName;
5142
}
5243

53-
public function getVersion(): ?Version
44+
public function setLinkedPackageName(string $packageName): void
5445
{
55-
return $this->version;
46+
$this->linkedPackageName = $packageName;
5647
}
5748

58-
public function setVersion(Version $version): void
49+
public function getLinkedVersionConstraint(): string
5950
{
60-
$this->version = $version;
51+
return $this->linkedVersionConstraint;
6152
}
6253

63-
/**
64-
* @return non-empty-array<string, string>
65-
*/
66-
public function toArray(): array
54+
public function setLinkedVersionConstraint(string $packageVersion): void
6755
{
68-
return [$this->getPackageName() => $this->getPackageVersion()];
56+
$this->linkedVersionConstraint = $packageVersion;
6957
}
7058
}

0 commit comments

Comments
 (0)