Failed Conditions
Push — master ( 2ade86...13f838 )
by Jonathan
18s
created

tests/Doctrine/Tests/ORM/Query/QueryTest.php (1 issue)

mismatching argument types.

Documentation Minor

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Doctrine\Tests\ORM\Query;
4
5
use Doctrine\Common\Cache\ArrayCache;
6
use Doctrine\Common\Collections\ArrayCollection;
7
8
use Doctrine\ORM\EntityManager;
9
use Doctrine\ORM\Internal\Hydration\IterableResult;
10
use Doctrine\ORM\Query\Parameter;
11
use Doctrine\ORM\Query\QueryException;
12
use Doctrine\Tests\Mocks\DriverConnectionMock;
13
use Doctrine\Tests\Mocks\StatementArrayMock;
14
use Doctrine\Tests\Models\CMS\CmsAddress;
15
use Doctrine\Tests\OrmTestCase;
16
17
class QueryTest extends OrmTestCase
18
{
19
    /** @var EntityManager */
20
    protected $_em = null;
21
22
    protected function setUp()
23
    {
24
        $this->_em = $this->_getTestEntityManager();
25
    }
26
27
    public function testGetParameters()
28
    {
29
        $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
30
31
        $parameters = new ArrayCollection();
32
33
        $this->assertEquals($parameters, $query->getParameters());
34
    }
35
36 View Code Duplication
    public function testGetParameters_HasSomeAlready()
37
    {
38
        $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
39
        $query->setParameter(2, 84);
40
41
        $parameters = new ArrayCollection();
42
        $parameters->add(new Parameter(2, 84));
43
44
        $this->assertEquals($parameters, $query->getParameters());
45
    }
46
47 View Code Duplication
    public function testSetParameters()
48
    {
49
        $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
50
51
        $parameters = new ArrayCollection();
52
        $parameters->add(new Parameter(1, 'foo'));
53
        $parameters->add(new Parameter(2, 'bar'));
54
55
        $query->setParameters($parameters);
56
57
        $this->assertEquals($parameters, $query->getParameters());
58
    }
59
60
    public function testFree()
61
    {
62
        $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
63
        $query->setParameter(2, 84, \PDO::PARAM_INT);
64
65
        $query->free();
66
67
        $this->assertEquals(0, count($query->getParameters()));
68
    }
69
70
    public function testClone()
71
    {
72
        $dql = "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1";
73
74
        $query = $this->_em->createQuery($dql);
75
        $query->setParameter(2, 84, \PDO::PARAM_INT);
76
        $query->setHint('foo', 'bar');
77
78
        $cloned = clone $query;
79
80
        $this->assertEquals($dql, $cloned->getDQL());
81
        $this->assertEquals(0, count($cloned->getParameters()));
82
        $this->assertFalse($cloned->getHint('foo'));
83
    }
84
85
    public function testFluentQueryInterface()
86
    {
87
        $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
88
        $q2 = $q->expireQueryCache(true)
89
          ->setQueryCacheLifetime(3600)
90
          ->setQueryCacheDriver(null)
91
          ->expireResultCache(true)
92
          ->setHint('foo', 'bar')
93
          ->setHint('bar', 'baz')
94
          ->setParameter(1, 'bar')
95
          ->setParameters(new ArrayCollection([new Parameter(2, 'baz')]))
96
          ->setResultCacheDriver(null)
97
          ->setResultCacheId('foo')
98
          ->setDQL('foo')
99
          ->setFirstResult(10)
100
          ->setMaxResults(10);
101
102
        $this->assertSame($q2, $q);
103
    }
104
105
    /**
106
     * @group DDC-968
107
     */
108
    public function testHints()
109
    {
110
        $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
111
        $q->setHint('foo', 'bar')->setHint('bar', 'baz');
112
113
        $this->assertEquals('bar', $q->getHint('foo'));
114
        $this->assertEquals('baz', $q->getHint('bar'));
115
        $this->assertEquals(['foo' => 'bar', 'bar' => 'baz'], $q->getHints());
116
        $this->assertTrue($q->hasHint('foo'));
117
        $this->assertFalse($q->hasHint('barFooBaz'));
118
    }
119
120
    /**
121
     * @group DDC-1588
122
     */
123
    public function testQueryDefaultResultCache()
124
    {
125
        $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
126
        $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
127
        $q->useResultCache(true);
128
        $this->assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver());
129
    }
130
131
    /**
132
     * @expectedException Doctrine\ORM\Query\QueryException
133
     **/
134
    public function testIterateWithNoDistinctAndWrongSelectClause()
135
    {
136
        $q = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
137
        $q->iterate();
138
    }
139
140
    /**
141
     * @expectedException Doctrine\ORM\Query\QueryException
142
     **/
143
    public function testIterateWithNoDistinctAndWithValidSelectClause()
144
    {
145
        $q = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
146
        $q->iterate();
147
    }
148
149
    public function testIterateWithDistinct()
150
    {
151
        $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
152
153
        self::assertInstanceOf(IterableResult::class, $q->iterate());
154
    }
155
156
    /**
157
     * @group DDC-1697
158
     */
159
    public function testCollectionParameters()
160
    {
161
        $cities = [
162
            0 => "Paris",
163
            3 => "Canne",
164
            9 => "St Julien"
165
        ];
166
167
        $query  = $this->_em
168
                ->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)")
169
                ->setParameter('cities', $cities);
170
171
        $parameters = $query->getParameters();
172
        $parameter  = $parameters->first();
173
174
        $this->assertEquals('cities', $parameter->getName());
175
        $this->assertEquals($cities, $parameter->getValue());
176
    }
177
178
    /**
179
     * @group DDC-2224
180
     */
181
    public function testProcessParameterValueClassMetadata()
182
    {
183
        $query  = $this->_em->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)");
184
        $this->assertEquals(
185
            CmsAddress::class,
186
            $query->processParameterValue($this->_em->getClassMetadata(CmsAddress::class))
187
        );
188
    }
189
190
    public function testDefaultQueryHints()
191
    {
192
        $config = $this->_em->getConfiguration();
193
        $defaultHints = [
194
            'hint_name_1' => 'hint_value_1',
195
            'hint_name_2' => 'hint_value_2',
196
            'hint_name_3' => 'hint_value_3',
197
        ];
198
199
        $config->setDefaultQueryHints($defaultHints);
200
        $query = $this->_em->createQuery();
201
        $this->assertSame($config->getDefaultQueryHints(), $query->getHints());
202
        $this->_em->getConfiguration()->setDefaultQueryHint('hint_name_1', 'hint_another_value_1');
203
        $this->assertNotSame($config->getDefaultQueryHints(), $query->getHints());
204
        $q2 = clone $query;
205
        $this->assertSame($config->getDefaultQueryHints(), $q2->getHints());
206
    }
207
208
    /**
209
     * @group DDC-3714
210
     */
211
    public function testResultCacheCaching()
212
    {
213
        $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
214
        $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache());
215
        /** @var DriverConnectionMock $driverConnectionMock */
216
        $driverConnectionMock = $this->_em->getConnection()->getWrappedConnection();
217
        $stmt = new StatementArrayMock([
218
            [
219
                'id_0' => 1,
220
            ]
221
        ]);
222
        $driverConnectionMock->setStatementMock($stmt);
223
        $res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u")
224
            ->useQueryCache(true)
225
            ->useResultCache(true, 60)
226
            //let it cache
227
            ->getResult();
228
229
        $this->assertCount(1, $res);
230
231
        $driverConnectionMock->setStatementMock(null);
0 ignored issues
show
null is of type null, but the function expects a object<Doctrine\DBAL\Driver\Statement>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
232
233
        $res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u")
234
            ->useQueryCache(true)
235
            ->useResultCache(false)
236
            ->getResult();
237
        $this->assertCount(0, $res);
238
    }
239
240
    /**
241
     * @group DDC-3741
242
     */
243
    public function testSetHydrationCacheProfileNull()
244
    {
245
        $query = $this->_em->createQuery();
246
        $query->setHydrationCacheProfile(null);
247
        $this->assertNull($query->getHydrationCacheProfile());
248
    }
249
250
    /**
251
     * @group 2947
252
     */
253
    public function testResultCacheEviction()
254
    {
255
        $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
256
257
        $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u")
258
                           ->useResultCache(true);
259
260
        /** @var DriverConnectionMock $driverConnectionMock */
261
        $driverConnectionMock = $this->_em->getConnection()
262
                                          ->getWrappedConnection();
263
264
        $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1]]));
265
266
        // Performs the query and sets up the initial cache
267
        self::assertCount(1, $query->getResult());
268
269
        $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1], ['id_0' => 2]]));
270
271
        // Retrieves cached data since expire flag is false and we have a cached result set
272
        self::assertCount(1, $query->getResult());
273
274
        // Performs the query and caches the result set since expire flag is true
275
        self::assertCount(2, $query->expireResultCache(true)->getResult());
276
277
        $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1]]));
278
279
        // Retrieves cached data since expire flag is false and we have a cached result set
280
        self::assertCount(2, $query->expireResultCache(false)->getResult());
281
    }
282
283
    /**
284
     * @group #6162
285
     */
286
    public function testSelectJoinSubquery()
287
    {
288
        $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )");
289
290
        $this->expectException(QueryException::class);
291
        $this->expectExceptionMessage('Subquery');
292
        $query->getSQL();
293
    }
294
295
    /**
296
     * @group #6162
297
     */
298
    public function testSelectFromSubquery()
299
    {
300
        $query = $this->_em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u");
301
302
        $this->expectException(QueryException::class);
303
        $this->expectExceptionMessage('Subquery');
304
        $query->getSQL();
305
    }
306
}
307