Skip to content

Commit e6eef1a

Browse files
authored
Backport QueryParameterTest (#11288)
1 parent 0efac09 commit e6eef1a

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Doctrine\Tests\ORM\Functional;
6+
7+
use Doctrine\DBAL\ArrayParameterType;
8+
use Doctrine\DBAL\Connection;
9+
use Doctrine\DBAL\ParameterType;
10+
use Doctrine\DBAL\Types\Types;
11+
use Doctrine\Tests\Models\CMS\CmsUser;
12+
use Doctrine\Tests\OrmFunctionalTestCase;
13+
14+
use function class_exists;
15+
16+
/** @group GH-11278 */
17+
final class QueryParameterTest extends OrmFunctionalTestCase
18+
{
19+
/** @var int */
20+
private $userId;
21+
22+
protected function setUp(): void
23+
{
24+
$this->useModelSet('cms');
25+
26+
parent::setUp();
27+
28+
$user = new CmsUser();
29+
$user->name = 'John Doe';
30+
$user->username = 'john';
31+
$user2 = new CmsUser();
32+
$user2->name = 'Jane Doe';
33+
$user2->username = 'jane';
34+
$user3 = new CmsUser();
35+
$user3->name = 'Just Bill';
36+
$user3->username = 'bill';
37+
38+
$this->_em->persist($user);
39+
$this->_em->persist($user2);
40+
$this->_em->persist($user3);
41+
$this->_em->flush();
42+
43+
$this->userId = $user->id;
44+
45+
$this->_em->clear();
46+
}
47+
48+
public function testParameterTypeInBuilder(): void
49+
{
50+
$result = $this->_em->createQueryBuilder()
51+
->from(CmsUser::class, 'u')
52+
->select('u.name')
53+
->where('u.id = :id')
54+
->setParameter('id', $this->userId, ParameterType::INTEGER)
55+
->getQuery()
56+
->getArrayResult();
57+
58+
self::assertSame([['name' => 'John Doe']], $result);
59+
}
60+
61+
public function testParameterTypeInQuery(): void
62+
{
63+
$result = $this->_em->createQueryBuilder()
64+
->from(CmsUser::class, 'u')
65+
->select('u.name')
66+
->where('u.id = :id')
67+
->getQuery()
68+
->setParameter('id', $this->userId, ParameterType::INTEGER)
69+
->getArrayResult();
70+
71+
self::assertSame([['name' => 'John Doe']], $result);
72+
}
73+
74+
public function testDbalTypeStringInBuilder(): void
75+
{
76+
$result = $this->_em->createQueryBuilder()
77+
->from(CmsUser::class, 'u')
78+
->select('u.name')
79+
->where('u.id = :id')
80+
->setParameter('id', $this->userId, Types::INTEGER)
81+
->getQuery()
82+
->getArrayResult();
83+
84+
self::assertSame([['name' => 'John Doe']], $result);
85+
}
86+
87+
public function testDbalTypeStringInQuery(): void
88+
{
89+
$result = $this->_em->createQueryBuilder()
90+
->from(CmsUser::class, 'u')
91+
->select('u.name')
92+
->where('u.id = :id')
93+
->getQuery()
94+
->setParameter('id', $this->userId, Types::INTEGER)
95+
->getArrayResult();
96+
97+
self::assertSame([['name' => 'John Doe']], $result);
98+
}
99+
100+
public function testArrayParameterTypeInBuilder(): void
101+
{
102+
$result = $this->_em->createQueryBuilder()
103+
->from(CmsUser::class, 'u')
104+
->select('u.name')
105+
->where('u.username IN (:usernames)')
106+
->orderBy('u.username')
107+
->setParameter('usernames', ['john', 'jane'], class_exists(ArrayParameterType::class) ? ArrayParameterType::STRING : Connection::PARAM_STR_ARRAY)
108+
->getQuery()
109+
->getArrayResult();
110+
111+
self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);
112+
}
113+
114+
public function testArrayParameterTypeInQuery(): void
115+
{
116+
$result = $this->_em->createQueryBuilder()
117+
->from(CmsUser::class, 'u')
118+
->select('u.name')
119+
->where('u.username IN (:usernames)')
120+
->orderBy('u.username')
121+
->getQuery()
122+
->setParameter('usernames', ['john', 'jane'], class_exists(ArrayParameterType::class) ? ArrayParameterType::STRING : Connection::PARAM_STR_ARRAY)
123+
->getArrayResult();
124+
125+
self::assertSame([['name' => 'Jane Doe'], ['name' => 'John Doe']], $result);
126+
}
127+
}

0 commit comments

Comments
 (0)