Skip to content

Commit cfc0655

Browse files
authored
Fix compatibility with DBAL 4.2 (#11592)
1 parent 831a1eb commit cfc0655

13 files changed

+68
-47
lines changed

tests/Performance/ArrayResultFactory.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

tests/Performance/EntityManagerFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace Doctrine\Performance;
66

77
use Doctrine\Common\EventManager;
8-
use Doctrine\DBAL\Cache\ArrayResult;
98
use Doctrine\DBAL\Cache\QueryCacheProfile;
109
use Doctrine\DBAL\Connection;
1110
use Doctrine\DBAL\Driver\PDO\SQLite\Driver;
@@ -17,6 +16,7 @@
1716
use Doctrine\ORM\Mapping\Driver\AttributeDriver;
1817
use Doctrine\ORM\Proxy\ProxyFactory;
1918
use Doctrine\ORM\Tools\SchemaTool;
19+
use Doctrine\Tests\Mocks\ArrayResultFactory;
2020
use Doctrine\Tests\TestUtil;
2121

2222
use function array_map;
@@ -67,7 +67,7 @@ public static function makeEntityManagerWithNoResultsConnection(): EntityManager
6767
/** {@inheritDoc} */
6868
public function executeQuery(string $sql, array $params = [], $types = [], QueryCacheProfile|null $qcp = null): Result
6969
{
70-
return new Result(new ArrayResult([]), $this);
70+
return ArrayResultFactory::createWrapperResultFromArray([], $this);
7171
}
7272
};
7373

tests/Performance/Hydration/MixedQueryFetchJoinArrayHydrationPerformanceBench.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use Doctrine\DBAL\Result;
88
use Doctrine\ORM\Internal\Hydration\ArrayHydrator;
99
use Doctrine\ORM\Query\ResultSetMapping;
10-
use Doctrine\Performance\ArrayResultFactory;
1110
use Doctrine\Performance\EntityManagerFactory;
11+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1212
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
1313
use Doctrine\Tests\Models\CMS\CmsUser;
1414
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
@@ -62,7 +62,7 @@ public function init(): void
6262
];
6363
}
6464

65-
$this->result = ArrayResultFactory::createFromArray($resultSet);
65+
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
6666
$this->hydrator = new ArrayHydrator(EntityManagerFactory::getEntityManager([]));
6767
$this->rsm = new ResultSetMapping();
6868

tests/Performance/Hydration/MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use Doctrine\DBAL\Result;
88
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
99
use Doctrine\ORM\Query\ResultSetMapping;
10-
use Doctrine\Performance\ArrayResultFactory;
1110
use Doctrine\Performance\EntityManagerFactory;
11+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1212
use Doctrine\Tests\Models\CMS\CmsAddress;
1313
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
1414
use Doctrine\Tests\Models\CMS\CmsUser;
@@ -49,7 +49,7 @@ public function init(): void
4949
];
5050
}
5151

52-
$this->result = ArrayResultFactory::createFromArray($resultSet);
52+
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
5353
$this->hydrator = new ObjectHydrator(EntityManagerFactory::getEntityManager([]));
5454
$this->rsm = new ResultSetMapping();
5555

tests/Performance/Hydration/SimpleQueryArrayHydrationPerformanceBench.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use Doctrine\DBAL\Result;
88
use Doctrine\ORM\Internal\Hydration\ArrayHydrator;
99
use Doctrine\ORM\Query\ResultSetMapping;
10-
use Doctrine\Performance\ArrayResultFactory;
1110
use Doctrine\Performance\EntityManagerFactory;
11+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1212
use Doctrine\Tests\Models\CMS\CmsUser;
1313
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
1414

@@ -53,7 +53,7 @@ public function init(): void
5353
];
5454
}
5555

56-
$this->result = ArrayResultFactory::createFromArray($resultSet);
56+
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
5757
$this->hydrator = new ArrayHydrator(EntityManagerFactory::getEntityManager([]));
5858
$this->rsm = new ResultSetMapping();
5959

tests/Performance/Hydration/SimpleQueryFullObjectHydrationPerformanceBench.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use Doctrine\DBAL\Result;
88
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
99
use Doctrine\ORM\Query\ResultSetMapping;
10-
use Doctrine\Performance\ArrayResultFactory;
1110
use Doctrine\Performance\EntityManagerFactory;
11+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1212
use Doctrine\Tests\Models\CMS\CmsAddress;
1313
use Doctrine\Tests\Models\CMS\CmsUser;
1414
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
@@ -44,7 +44,7 @@ public function init(): void
4444
];
4545
}
4646

47-
$this->result = ArrayResultFactory::createFromArray($resultSet);
47+
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
4848
$this->hydrator = new ObjectHydrator(EntityManagerFactory::getEntityManager([]));
4949
$this->rsm = new ResultSetMapping();
5050

tests/Performance/Hydration/SimpleQueryScalarHydrationPerformanceBench.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use Doctrine\DBAL\Result;
88
use Doctrine\ORM\Internal\Hydration\ScalarHydrator;
99
use Doctrine\ORM\Query\ResultSetMapping;
10-
use Doctrine\Performance\ArrayResultFactory;
1110
use Doctrine\Performance\EntityManagerFactory;
11+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1212
use Doctrine\Tests\Models\CMS\CmsUser;
1313
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
1414

@@ -53,7 +53,7 @@ public function init(): void
5353
];
5454
}
5555

56-
$this->result = ArrayResultFactory::createFromArray($resultSet);
56+
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
5757
$this->hydrator = new ScalarHydrator(EntityManagerFactory::getEntityManager([]));
5858
$this->rsm = new ResultSetMapping();
5959

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Doctrine\Tests\Mocks;
6+
7+
use Doctrine\DBAL\Cache\ArrayResult;
8+
use Doctrine\DBAL\Connection;
9+
use Doctrine\DBAL\Driver\PDO\SQLite\Driver;
10+
use Doctrine\DBAL\Result;
11+
use ReflectionMethod;
12+
13+
use function array_keys;
14+
use function array_map;
15+
use function array_values;
16+
17+
final class ArrayResultFactory
18+
{
19+
/** @param list<array<string, mixed>> $resultSet */
20+
public static function createDriverResultFromArray(array $resultSet): ArrayResult
21+
{
22+
if ((new ReflectionMethod(ArrayResult::class, '__construct'))->getNumberOfRequiredParameters() < 2) {
23+
// DBAL < 4.2
24+
return new ArrayResult($resultSet);
25+
}
26+
27+
// DBAL 4.2+
28+
return new ArrayResult(
29+
array_keys($resultSet[0] ?? []),
30+
array_map(array_values(...), $resultSet),
31+
);
32+
}
33+
34+
/** @param list<array<string, mixed>> $resultSet */
35+
public static function createWrapperResultFromArray(array $resultSet, Connection|null $connection = null): Result
36+
{
37+
return new Result(
38+
self::createDriverResultFromArray($resultSet),
39+
$connection ?? new Connection([], new Driver()),
40+
);
41+
}
42+
}

tests/Tests/ORM/Functional/Ticket/GH6362Test.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
namespace Doctrine\Tests\ORM\Functional\Ticket;
66

77
use Doctrine\Common\Collections\Collection;
8-
use Doctrine\DBAL\Cache\ArrayResult;
98
use Doctrine\DBAL\Connection;
10-
use Doctrine\DBAL\Result;
119
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
1210
use Doctrine\ORM\Mapping\Column;
1311
use Doctrine\ORM\Mapping\DiscriminatorColumn;
@@ -19,6 +17,7 @@
1917
use Doctrine\ORM\Mapping\ManyToOne;
2018
use Doctrine\ORM\Mapping\OneToMany;
2119
use Doctrine\ORM\Query\ResultSetMapping;
20+
use Doctrine\Tests\Mocks\ArrayResultFactory;
2221
use Doctrine\Tests\OrmFunctionalTestCase;
2322
use PHPUnit\Framework\Attributes\Group;
2423

@@ -78,7 +77,7 @@ public function testInheritanceJoinAlias(): void
7877
],
7978
];
8079

81-
$stmt = new Result(new ArrayResult($resultSet), $this->createMock(Connection::class));
80+
$stmt = ArrayResultFactory::createWrapperResultFromArray($resultSet, $this->createMock(Connection::class));
8281
$hydrator = new ObjectHydrator($this->_em);
8382
$result = $hydrator->hydrateAll($stmt, $rsm);
8483

tests/Tests/ORM/Functional/Ticket/GH9807Test.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
namespace Doctrine\Tests\ORM\Functional\Ticket;
66

77
use Doctrine\Common\Collections\Collection;
8-
use Doctrine\DBAL\Cache\ArrayResult;
98
use Doctrine\DBAL\Connection;
10-
use Doctrine\DBAL\Result;
119
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
1210
use Doctrine\ORM\Mapping as ORM;
1311
use Doctrine\ORM\Mapping\Column;
1412
use Doctrine\ORM\Mapping\Entity;
1513
use Doctrine\ORM\Mapping\GeneratedValue;
1614
use Doctrine\ORM\Mapping\Id;
1715
use Doctrine\ORM\Query\ResultSetMapping;
16+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1817
use Doctrine\Tests\OrmFunctionalTestCase;
1918

2019
final class GH9807Test extends OrmFunctionalTestCase
@@ -63,7 +62,7 @@ public function testHydrateJoinedCollectionWithFirstNullishRow(): void
6362
],
6463
];
6564

66-
$stmt = new Result(new ArrayResult($resultSet), $this->createMock(Connection::class));
65+
$stmt = ArrayResultFactory::createWrapperResultFromArray($resultSet, $this->createMock(Connection::class));
6766

6867
/** @var GH9807Main[] $result */
6968
$result = $hydrator->hydrateAll($stmt, $rsm);

tests/Tests/ORM/Hydration/HydrationTestCase.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace Doctrine\Tests\ORM\Hydration;
66

7-
use Doctrine\DBAL\Cache\ArrayResult;
87
use Doctrine\DBAL\Result;
98
use Doctrine\ORM\EntityManagerInterface;
9+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1010
use Doctrine\Tests\OrmTestCase;
1111

1212
class HydrationTestCase extends OrmTestCase
@@ -22,6 +22,6 @@ protected function setUp(): void
2222

2323
protected function createResultMock(array $resultSet): Result
2424
{
25-
return new Result(new ArrayResult($resultSet), $this->entityManager->getConnection());
25+
return ArrayResultFactory::createWrapperResultFromArray($resultSet, $this->entityManager->getConnection());
2626
}
2727
}

tests/Tests/ORM/Hydration/ObjectHydratorTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44

55
namespace Doctrine\Tests\ORM\Hydration;
66

7-
use Doctrine\DBAL\Cache\ArrayResult;
87
use Doctrine\DBAL\Connection;
9-
use Doctrine\DBAL\Result;
108
use Doctrine\ORM\Internal\Hydration\HydrationException;
119
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
1210
use Doctrine\ORM\Mapping\ClassMetadata;
1311
use Doctrine\ORM\PersistentCollection;
1412
use Doctrine\ORM\Proxy\InternalProxy;
1513
use Doctrine\ORM\Proxy\ProxyFactory;
1614
use Doctrine\ORM\Query\ResultSetMapping;
15+
use Doctrine\Tests\Mocks\ArrayResultFactory;
1716
use Doctrine\Tests\Models\CMS\CmsAddress;
1817
use Doctrine\Tests\Models\CMS\CmsArticle;
1918
use Doctrine\Tests\Models\CMS\CmsComment;
@@ -1337,7 +1336,7 @@ public function testResultIterationWithAliasedUserEntity(): void
13371336
$hydrator = new ObjectHydrator($this->entityManager);
13381337
$rowNum = 0;
13391338
$iterableResult = $hydrator->toIterable(
1340-
new Result(new ArrayResult($resultSet), $this->createMock(Connection::class)),
1339+
ArrayResultFactory::createWrapperResultFromArray($resultSet, $this->createMock(Connection::class)),
13411340
$rsm,
13421341
);
13431342

tests/Tests/ORM/Query/QueryTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use DateTimeImmutable;
99
use Doctrine\Common\Collections\ArrayCollection;
1010
use Doctrine\DBAL\ArrayParameterType;
11-
use Doctrine\DBAL\Cache\ArrayResult;
1211
use Doctrine\DBAL\Connection;
1312
use Doctrine\DBAL\Driver;
1413
use Doctrine\DBAL\Driver\Result;
@@ -22,6 +21,7 @@
2221
use Doctrine\ORM\Query\QueryException;
2322
use Doctrine\ORM\UnitOfWork;
2423
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
24+
use Doctrine\Tests\Mocks\ArrayResultFactory;
2525
use Doctrine\Tests\Mocks\EntityManagerMock;
2626
use Doctrine\Tests\Models\CMS\CmsAddress;
2727
use Doctrine\Tests\Models\CMS\CmsGroup;
@@ -361,10 +361,10 @@ public function testResultCacheCaching(): void
361361
{
362362
$entityManager = $this->createTestEntityManagerWithConnection(
363363
$this->createConnection(
364-
new ArrayResult([
364+
ArrayResultFactory::createDriverResultFromArray([
365365
['id_0' => 1],
366366
]),
367-
new ArrayResult([]),
367+
ArrayResultFactory::createDriverResultFromArray([]),
368368
),
369369
);
370370

@@ -399,14 +399,14 @@ public function testResultCacheEviction(): void
399399
{
400400
$entityManager = $this->createTestEntityManagerWithConnection(
401401
$this->createConnection(
402-
new ArrayResult([
402+
ArrayResultFactory::createDriverResultFromArray([
403403
['id_0' => 1],
404404
]),
405-
new ArrayResult([
405+
ArrayResultFactory::createDriverResultFromArray([
406406
['id_0' => 1],
407407
['id_0' => 2],
408408
]),
409-
new ArrayResult([
409+
ArrayResultFactory::createDriverResultFromArray([
410410
['id_0' => 1],
411411
]),
412412
),

0 commit comments

Comments
 (0)