1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM\Hydration;
use Doctrine\ORM\Exception\MultipleSelectorsFoundException;
use Doctrine\ORM\Internal\Hydration\ScalarColumnHydrator;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\Tests\Models\CMS\CmsUser;
use PHPUnit\Framework\Attributes\RequiresPhpunit;
use function sprintf;
#[RequiresPhpunit('< 12')]
class ScalarColumnHydratorTest extends HydrationTestCase
{
/**
* Select u.id from CmsUser u
*/
public function testEmptyResultTest(): void
{
$rsm = new ResultSetMapping();
$rsm->addEntityResult(CmsUser::class, 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$stmt = $this->createResultMock([]);
$hydrator = new ScalarColumnHydrator($this->entityManager);
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertIsArray($result);
$this->assertEmpty($result);
}
/**
* Select u.id from CmsUser u
*/
public function testSingleColumnEntityQueryWithoutScalarMap(): void
{
$rsm = new ResultSetMapping();
$rsm->addEntityResult(CmsUser::class, 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$resultSet = [
['u__id' => '1'],
['u__id' => '2'],
];
$stmt = $this->createResultMock($resultSet);
$hydrator = new ScalarColumnHydrator($this->entityManager);
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertIsArray($result);
$this->assertCount(2, $result);
$this->assertEquals(1, $result[0]);
$this->assertEquals(2, $result[1]);
}
/**
* Select u.id from CmsUser u
*/
public function testSingleColumnEntityQueryWithScalarMap(): void
{
$rsm = new ResultSetMapping();
$rsm->addEntityResult(CmsUser::class, 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addScalarResult('sclr0', 'id');
$rsm->addIndexByScalar('sclr0');
$resultSet = [
['u__id' => '1'],
['u__id' => '2'],
];
$stmt = $this->createResultMock($resultSet);
$hydrator = new ScalarColumnHydrator($this->entityManager);
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertIsArray($result);
$this->assertCount(2, $result);
$this->assertEquals(1, $result[0]);
$this->assertEquals(2, $result[1]);
}
/**
* Select u.id, u.name from CmsUser u
*/
public function testMultipleColumnEntityQueryThrowsException(): void
{
$rsm = new ResultSetMapping();
$rsm->addEntityResult(CmsUser::class, 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
$resultSet = [
[
'u__id' => '1',
'u__name' => 'Gregoire',
],
[
'u__id' => '2',
'u__name' => 'Bhushan',
],
];
$stmt = $this->createResultMock($resultSet);
$hydrator = new ScalarColumnHydrator($this->entityManager);
$this->expectException(MultipleSelectorsFoundException::class);
$this->expectExceptionMessage(sprintf(
MultipleSelectorsFoundException::MULTIPLE_SELECTORS_FOUND_EXCEPTION,
'id, name',
));
$hydrator->hydrateAll($stmt, $rsm);
}
}
|