Skip to content

Commit 8ec272d

Browse files
committed
feat: dbal 4.0 compatibility
1 parent 207a2fa commit 8ec272d

4 files changed

Lines changed: 25 additions & 12 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"require": {
2121
"php": ">=8.0",
2222
"doctrine/annotations": "^2.0",
23-
"doctrine/dbal": "^3.3",
23+
"doctrine/dbal": "^3.8 || ^4.0",
2424
"phpdocumentor/reflection-docblock": "^5.3",
2525
"phpstan/phpdoc-parser": "^1.27",
2626
"symfony/config": "^6.0 || ^7.0",

src/Bridge/Repository/AbstractEntityRepository.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\DBAL\Query\Expression\CompositeExpression;
88
use Doctrine\DBAL\Query\QueryBuilder;
9+
use Doctrine\DBAL\Query\QueryException;
910
use JetBrains\PhpStorm\ArrayShape;
1011
use Symfony\Component\OptionsResolver\OptionsResolver;
1112
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
@@ -174,8 +175,10 @@ public function createFindByQueryBuilder(array $criteria, ?array $orderBy): Quer
174175

175176
$this->addOrderByClause($queryBuilder, $orderBy);
176177

177-
$queryBuilder->addSelect(...$this->additionalFieldsToSelect);
178-
$this->additionalFieldsToSelect = [];
178+
if (!empty($this->additionalFieldsToSelect)) {
179+
$queryBuilder->addSelect(...$this->additionalFieldsToSelect);
180+
$this->additionalFieldsToSelect = [];
181+
}
179182

180183
return $queryBuilder;
181184
}
@@ -561,8 +564,12 @@ private function joinSelfMetaTable(QueryBuilder $queryBuilder, bool $incrementIf
561564

562565
private function hasJoin(QueryBuilder $queryBuilder, string $joinAlias): bool
563566
{
564-
if (preg_match_all('/JOIN (\w+) (\w+) ON p\./im', $queryBuilder->getSQL(), $matches, PREG_SET_ORDER)) {
565-
return count(array_filter($matches, static fn (array $match) => $match[2] === $joinAlias)) > 0;
567+
try {
568+
if (preg_match_all('/JOIN (\w+) (\w+) ON p\./im', $queryBuilder->getSQL(), $matches, PREG_SET_ORDER)) {
569+
return count(array_filter($matches, static fn (array $match) => $match[2] === $joinAlias)) > 0;
570+
}
571+
} catch (QueryException) {
572+
return false;
566573
}
567574

568575
return false;

src/Bridge/Repository/TermRepository.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ public function createFindByQueryBuilder(array $criteria, ?array $orderBy): Quer
5050
$this->getPrefixedFields(['term_id', 'name', 'slug', 'taxonomy', 'term_taxonomy_id', 'count']),
5151
);
5252

53-
$queryBuilder->select([
53+
$queryBuilder->select(
5454
...$this->getPrefixedFields(['term_id', 'name', 'slug', 'taxonomy', 'term_taxonomy_id', 'count']),
55-
...$extraFields,
56-
]);
55+
...$extraFields
56+
);
5757
} else {
5858
foreach ($this->getPrefixedFields($selectedFields) as $field) {
5959
if (!\in_array($field, $groupByFields, true)) {
@@ -152,19 +152,21 @@ public function removeTermsFromEntity(BaseEntity $entity, array $terms): void
152152

153153
private function recountTerms(): void
154154
{
155+
$tableName = $this->entityManager->getTablesPrefix() . 'term_taxonomy';
156+
155157
$subSelect = $this->entityManager->getConnection()
156158
->createQueryBuilder()
157159
->select('COUNT(*)')
158160
->from($this->entityManager->getTablesPrefix() . 'term_relationships', 'tr')
159161
->leftJoin('tr', $this->entityManager->getTablesPrefix() . 'posts', 'p', 'p.id = tr.object_id')
160-
->where('tr.term_taxonomy_id = tt.term_taxonomy_id')
161-
->andWhere("tt.taxonomy NOT IN ('link_category')")
162+
->where("tr.term_taxonomy_id = $tableName.term_taxonomy_id")
163+
->andWhere("$tableName.taxonomy NOT IN ('link_category')")
162164
->andWhere("p.post_status IN ('publish', 'future')")
163165
;
164166

165167
$this->entityManager->getConnection()
166168
->createQueryBuilder()
167-
->update($this->entityManager->getTablesPrefix() . 'term_taxonomy', 'tt')
169+
->update($tableName)
168170
->set('count', sprintf('(%s)', $subSelect->getSQL()))
169171
->executeStatement()
170172
;

test/Test/TestCase.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\Common\Annotations\AnnotationReader;
88
use Doctrine\DBAL\Connection;
99
use Doctrine\DBAL\DriverManager;
10+
use Doctrine\DBAL\Tools\DsnParser;
1011
use PHPUnit\Framework\TestCase as BaseTestCase;
1112
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
1213
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
@@ -39,7 +40,10 @@ abstract class TestCase extends BaseTestCase
3940

4041
protected function setUp(): void
4142
{
42-
$this->connection = DriverManager::getConnection(['url' => getenv('WORDPRESS_DATABASE_URL')]);
43+
$dsnParser = new DsnParser(['mysql' => 'pdo_mysql']);
44+
$this->connection = DriverManager::getConnection(
45+
$dsnParser->parse(getenv('WORDPRESS_DATABASE_URL'))
46+
);
4347

4448
$loader = class_exists('\\Symfony\\Component\\Serializer\\Mapping\\Loader\\AnnotationLoader')
4549
? new AnnotationLoader(new AnnotationReader())

0 commit comments

Comments
 (0)