Skip to content

Commit 2c50946

Browse files
committed
Add index to metadata link entities
Signed-off-by: Tim Goudriaan <tim@codedmonkey.com>
1 parent 4ce1688 commit 2c50946

11 files changed

+77
-25
lines changed

migrations/Version20260120114538.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ private function createMetadataTables(): void
9494
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
9595
linked_package_name VARCHAR(191) NOT NULL,
9696
linked_version_constraint TEXT NOT NULL,
97+
index INT NOT NULL,
9798
metadata_id INT NOT NULL,
9899
PRIMARY KEY (id)
99100
)
@@ -106,6 +107,7 @@ private function createMetadataTables(): void
106107
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
107108
linked_package_name VARCHAR(191) NOT NULL,
108109
linked_version_constraint TEXT NOT NULL,
110+
index INT NOT NULL,
109111
metadata_id INT NOT NULL,
110112
PRIMARY KEY (id)
111113
)
@@ -118,6 +120,7 @@ private function createMetadataTables(): void
118120
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
119121
linked_package_name VARCHAR(191) NOT NULL,
120122
linked_version_constraint TEXT NOT NULL,
123+
index INT NOT NULL,
121124
metadata_id INT NOT NULL,
122125
PRIMARY KEY (id)
123126
)
@@ -130,6 +133,7 @@ private function createMetadataTables(): void
130133
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
131134
linked_package_name VARCHAR(191) NOT NULL,
132135
linked_version_constraint TEXT NOT NULL,
136+
index INT NOT NULL,
133137
metadata_id INT NOT NULL,
134138
PRIMARY KEY (id)
135139
)
@@ -142,6 +146,7 @@ private function createMetadataTables(): void
142146
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
143147
linked_package_name VARCHAR(191) NOT NULL,
144148
linked_version_constraint TEXT NOT NULL,
149+
index INT NOT NULL,
145150
metadata_id INT NOT NULL,
146151
PRIMARY KEY (id)
147152
)
@@ -154,6 +159,7 @@ private function createMetadataTables(): void
154159
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
155160
linked_package_name VARCHAR(191) NOT NULL,
156161
linked_version_constraint TEXT NOT NULL,
162+
index INT NOT NULL,
157163
metadata_id INT NOT NULL,
158164
PRIMARY KEY (id)
159165
)
@@ -292,8 +298,12 @@ private function fillMetadataTables(): void
292298

293299
foreach ($linkTables as $linkTable) {
294300
$this->addSql(<<<SQL
295-
INSERT INTO metadata_{$linkTable}_link (metadata_id, linked_package_name, linked_version_constraint)
296-
SELECT metadata.id, link.linked_package_name, link.linked_version_constraint
301+
INSERT INTO metadata_{$linkTable}_link (metadata_id, linked_package_name, linked_version_constraint, index)
302+
SELECT
303+
metadata.id,
304+
link.linked_package_name,
305+
link.linked_version_constraint,
306+
ROW_NUMBER() OVER (PARTITION BY metadata.id) - 1
297307
FROM version_{$linkTable}_link link
298308
INNER JOIN metadata metadata ON link.version_id = metadata.version_id
299309
SQL);
@@ -757,6 +767,7 @@ private function fillVersionTables(): void
757767
WHERE version_link.version_id = metadata.version_id
758768
AND version_link.linked_package_name = metadata_link.linked_package_name
759769
)
770+
ORDER BY metadata_link.index
760771
SQL);
761772
}
762773
}

phpstan.dist.neon

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ parameters:
1111
- tests/bootstrap.php
1212
ignoreErrors:
1313
- '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#'
14-
- '#CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractMetadataLink given\.#'
15-
- '#^PHPDoc tag @var with type CodedMonkey\\Dirigent\\Doctrine\\Entity\\AbstractMetadataLink is not subtype of native type#'
1614
- '#^Property CodedMonkey\\Dirigent\\Doctrine\\Entity\\[a-zA-Z]+\:\:\$id \(int\|null\) is never assigned int so it can be removed from the property type\.$#'
1715
-
1816
message: '#^Class CodedMonkey\\Dirigent\\Doctrine\\Entity\\TrackedEntity has an uninitialized readonly property \$createdAt\. Assign it in the constructor\.$#'

src/Doctrine/Entity/AbstractMetadataLink.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,25 @@ abstract class AbstractMetadataLink
2121
#[ORM\Column(type: Types::TEXT)]
2222
private string $linkedVersionConstraint;
2323

24-
public function __construct(Metadata $metadata)
25-
{
24+
#[ORM\Column]
25+
private int $index;
26+
27+
public function __construct(
28+
Metadata $metadata,
29+
string $linkedPackageName,
30+
string $linkedVersionConstraint,
31+
int $index,
32+
) {
2633
$this->metadata = $metadata;
34+
$this->linkedPackageName = $linkedPackageName;
35+
$this->linkedVersionConstraint = $linkedVersionConstraint;
36+
$this->index = $index;
37+
38+
$this->addToCollection();
2739
}
2840

41+
abstract protected function addToCollection(): void;
42+
2943
public function getId(): ?int
3044
{
3145
return $this->id;
@@ -41,18 +55,13 @@ public function getLinkedPackageName(): string
4155
return $this->linkedPackageName;
4256
}
4357

44-
public function setLinkedPackageName(string $packageName): void
45-
{
46-
$this->linkedPackageName = $packageName;
47-
}
48-
4958
public function getLinkedVersionConstraint(): string
5059
{
5160
return $this->linkedVersionConstraint;
5261
}
5362

54-
public function setLinkedVersionConstraint(string $packageVersion): void
63+
public function getIndex(): int
5564
{
56-
$this->linkedVersionConstraint = $packageVersion;
65+
return $this->index;
5766
}
5867
}

src/Doctrine/Entity/Metadata.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,36 +100,42 @@ class Metadata extends TrackedEntity implements \Stringable
100100
* @var Collection<int, MetadataRequireLink>
101101
*/
102102
#[ORM\OneToMany(targetEntity: MetadataRequireLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
103+
#[ORM\OrderBy(['index' => 'ASC'])]
103104
private Collection $require;
104105

105106
/**
106107
* @var Collection<int, MetadataDevRequireLink>
107108
*/
108109
#[ORM\OneToMany(targetEntity: MetadataDevRequireLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
110+
#[ORM\OrderBy(['index' => 'ASC'])]
109111
private Collection $devRequire;
110112

111113
/**
112114
* @var Collection<int, MetadataConflictLink>
113115
*/
114116
#[ORM\OneToMany(targetEntity: MetadataConflictLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
117+
#[ORM\OrderBy(['index' => 'ASC'])]
115118
private Collection $conflict;
116119

117120
/**
118121
* @var Collection<int, MetadataProvideLink>
119122
*/
120123
#[ORM\OneToMany(targetEntity: MetadataProvideLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
124+
#[ORM\OrderBy(['index' => 'ASC'])]
121125
private Collection $provide;
122126

123127
/**
124128
* @var Collection<int, MetadataReplaceLink>
125129
*/
126130
#[ORM\OneToMany(targetEntity: MetadataReplaceLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
131+
#[ORM\OrderBy(['index' => 'ASC'])]
127132
private Collection $replace;
128133

129134
/**
130135
* @var Collection<int, MetadataSuggestLink>
131136
*/
132137
#[ORM\OneToMany(targetEntity: MetadataSuggestLink::class, mappedBy: 'metadata', cascade: ['persist', 'detach', 'remove'])]
138+
#[ORM\OrderBy(['index' => 'ASC'])]
133139
private Collection $suggest;
134140

135141
/**

src/Doctrine/Entity/MetadataConflictLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class MetadataConflictLink extends AbstractMetadataLink
1010
#[ORM\ManyToOne(targetEntity: Metadata::class, inversedBy: 'conflict')]
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
13+
14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getConflict()->add($this);
18+
}
1319
}

src/Doctrine/Entity/MetadataDevRequireLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class MetadataDevRequireLink extends AbstractMetadataLink
1010
#[ORM\ManyToOne(targetEntity: Metadata::class, inversedBy: 'devRequire')]
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
13+
14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getDevRequire()->add($this);
18+
}
1319
}

src/Doctrine/Entity/MetadataProvideLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ class MetadataProvideLink extends AbstractMetadataLink
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
1313

14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getProvide()->add($this);
18+
}
19+
1420
public function isImplementation(): bool
1521
{
1622
return str_ends_with($this->getLinkedPackageName(), '-implementation');

src/Doctrine/Entity/MetadataReplaceLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class MetadataReplaceLink extends AbstractMetadataLink
1010
#[ORM\ManyToOne(targetEntity: Metadata::class, inversedBy: 'replace')]
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
13+
14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getReplace()->add($this);
18+
}
1319
}

src/Doctrine/Entity/MetadataRequireLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class MetadataRequireLink extends AbstractMetadataLink
1010
#[ORM\ManyToOne(targetEntity: Metadata::class, inversedBy: 'require')]
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
13+
14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getRequire()->add($this);
18+
}
1319
}

src/Doctrine/Entity/MetadataSuggestLink.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@ class MetadataSuggestLink extends AbstractMetadataLink
1010
#[ORM\ManyToOne(targetEntity: Metadata::class, inversedBy: 'suggest')]
1111
#[ORM\JoinColumn(nullable: false)]
1212
protected Metadata $metadata;
13+
14+
#[\Override]
15+
protected function addToCollection(): void
16+
{
17+
$this->metadata->getSuggest()->add($this);
18+
}
1319
}

0 commit comments

Comments
 (0)