mirror of
https://github.com/doctrine/orm.git
synced 2026-04-30 01:43:20 +02:00
84 lines
2.8 KiB
PHP
84 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Doctrine\Performance\Hydration;
|
|
|
|
use Doctrine\DBAL\Result;
|
|
use Doctrine\ORM\Internal\Hydration\ArrayHydrator;
|
|
use Doctrine\ORM\Query\ResultSetMapping;
|
|
use Doctrine\Performance\EntityManagerFactory;
|
|
use Doctrine\Tests\Mocks\ArrayResultFactory;
|
|
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
|
|
use Doctrine\Tests\Models\CMS\CmsUser;
|
|
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
|
|
|
|
/** @BeforeMethods({"init"}) */
|
|
final class MixedQueryFetchJoinArrayHydrationPerformanceBench
|
|
{
|
|
private ArrayHydrator|null $hydrator = null;
|
|
|
|
private ResultSetMapping|null $rsm = null;
|
|
|
|
private Result|null $result = null;
|
|
|
|
public function init(): void
|
|
{
|
|
$resultSet = [
|
|
[
|
|
'u__id' => '1',
|
|
'u__status' => 'developer',
|
|
'u__username' => 'romanb',
|
|
'u__name' => 'Roman',
|
|
'sclr0' => 'ROMANB',
|
|
'p__phonenumber' => '42',
|
|
],
|
|
[
|
|
'u__id' => '1',
|
|
'u__status' => 'developer',
|
|
'u__username' => 'romanb',
|
|
'u__name' => 'Roman',
|
|
'sclr0' => 'ROMANB',
|
|
'p__phonenumber' => '43',
|
|
],
|
|
[
|
|
'u__id' => '2',
|
|
'u__status' => 'developer',
|
|
'u__username' => 'romanb',
|
|
'u__name' => 'Roman',
|
|
'sclr0' => 'JWAGE',
|
|
'p__phonenumber' => '91',
|
|
],
|
|
];
|
|
|
|
for ($i = 4; $i < 10000; ++$i) {
|
|
$resultSet[] = [
|
|
'u__id' => $i,
|
|
'u__status' => 'developer',
|
|
'u__username' => 'jwage',
|
|
'u__name' => 'Jonathan',
|
|
'sclr0' => 'JWAGE' . $i,
|
|
'p__phonenumber' => '91',
|
|
];
|
|
}
|
|
|
|
$this->result = ArrayResultFactory::createWrapperResultFromArray($resultSet);
|
|
$this->hydrator = new ArrayHydrator(EntityManagerFactory::getEntityManager([]));
|
|
$this->rsm = new ResultSetMapping();
|
|
|
|
$this->rsm->addEntityResult(CmsUser::class, 'u');
|
|
$this->rsm->addJoinedEntityResult(CmsPhonenumber::class, 'p', 'u', 'phonenumbers');
|
|
$this->rsm->addFieldResult('u', 'u__id', 'id');
|
|
$this->rsm->addFieldResult('u', 'u__status', 'status');
|
|
$this->rsm->addFieldResult('u', 'u__username', 'username');
|
|
$this->rsm->addFieldResult('u', 'u__name', 'name');
|
|
$this->rsm->addScalarResult('sclr0', 'nameUpper');
|
|
$this->rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
|
|
}
|
|
|
|
public function benchHydration(): void
|
|
{
|
|
$this->hydrator->hydrateAll($this->result, $this->rsm);
|
|
}
|
|
}
|