‪TYPO3CMS  ‪main
Typo3DatabaseBackendTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\Test;
25 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
26 
27 final class ‪Typo3DatabaseBackendTest extends FunctionalTestCase
28 {
30  'SYS' => [
31  'caching' => [
32  'cacheConfigurations' => [
33  // Set pages cache database backend, testing-framework sets this to NullBackend by default.
34  'pages' => [
35  'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
36  ],
37  ],
38  ],
39  ],
40  ];
41 
42  #[Test]
43  public function ‪getReturnsPreviouslySetEntry(): void
44  {
45  $frontendMock = $this->createMock(FrontendInterface::class);
46  $frontendMock->method('getIdentifier')->willReturn('pages');
47 
48  $subject = new ‪Typo3DatabaseBackend('Testing');
49  $subject->setCache($frontendMock);
50 
51  $subject->set('myIdentifier', 'myData');
52  self::assertSame('myData', $subject->get('myIdentifier'));
53  }
54 
55  #[Test]
57  {
58  $frontendMock = $this->createMock(FrontendInterface::class);
59  $frontendMock->method('getIdentifier')->willReturn('pages');
60 
61  $subject = new ‪Typo3DatabaseBackend('Testing');
62  $subject->setCache($frontendMock);
63 
64  $subject->set('myIdentifier', 'myData');
65  $subject->set('myIdentifier', 'myNewData');
66  self::assertSame('myNewData', $subject->get('myIdentifier'));
67  }
68 
69  #[Test]
71  {
72  $frontendMock = $this->createMock(FrontendInterface::class);
73  $frontendMock->method('getIdentifier')->willReturn('pages');
74 
75  $subject = new ‪Typo3DatabaseBackend('Testing');
76  $subject->setCache($frontendMock);
77 
78  $subject->set('myIdentifier', 'myData', ['aTag', 'anotherTag']);
79 
80  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
81  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
82  self::assertSame(1, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'myIdentifier']));
83  self::assertSame(1, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'myIdentifier', 'tag' => 'aTag']));
84  self::assertSame(1, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'myIdentifier', 'tag' => 'anotherTag']));
85  }
86 
87  #[Test]
88  public function ‪setStoresCompressedContent(): void
89  {
90  $frontendMock = $this->createMock(FrontendInterface::class);
91  $frontendMock->method('getIdentifier')->willReturn('pages');
92 
93  // Have backend with compression enabled
94  $subject = new ‪Typo3DatabaseBackend('Testing', ['compression' => true]);
95  $subject->setCache($frontendMock);
96 
97  $subject->set('myIdentifier', 'myCachedContent');
98 
99  $row = (new ‪ConnectionPool())
100  ->getConnectionForTable('cache_pages')
101  ->select(
102  ['content'],
103  'cache_pages',
104  ['identifier' => 'myIdentifier']
105  )
106  ->fetchAssociative();
107 
108  // Content comes back uncompressed
109  self::assertSame('myCachedContent', gzuncompress($row['content']));
110  }
111 
112  #[Test]
114  {
115  $frontendMock = $this->createMock(FrontendInterface::class);
116  $frontendMock->method('getIdentifier')->willReturn('pages');
117 
118  $subject = new ‪Typo3DatabaseBackend('Testing');
119  $subject->setCache($frontendMock);
120 
121  self::assertFalse($subject->get('myIdentifier'));
122  }
123 
124  #[Test]
126  {
127  $frontendMock = $this->createMock(FrontendInterface::class);
128  $frontendMock->method('getIdentifier')->willReturn('pages');
129 
130  // Push an expired row into db
131  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
132  'cache_pages',
133  [
134  'identifier' => 'myIdentifier',
135  'expires' => ‪$GLOBALS['EXEC_TIME'] - 60,
136  'content' => 'myCachedContent',
137  ],
138  [
139  'content' => ‪Connection::PARAM_LOB,
140  ]
141  );
142 
143  $subject = new ‪Typo3DatabaseBackend('Testing');
144  $subject->setCache($frontendMock);
145 
146  self::assertFalse($subject->get('myIdentifier'));
147  }
148 
149  #[Test]
150  public function ‪getReturnsNotExpiredCacheEntry(): void
151  {
152  $frontendMock = $this->createMock(FrontendInterface::class);
153  $frontendMock->method('getIdentifier')->willReturn('pages');
154 
155  // Push a row into db
156  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
157  'cache_pages',
158  [
159  'identifier' => 'myIdentifier',
160  'expires' => ‪$GLOBALS['EXEC_TIME'] + 60,
161  'content' => 'myCachedContent',
162  ],
163  [
164  'content' => ‪Connection::PARAM_LOB,
165  ]
166  );
167 
168  $subject = new ‪Typo3DatabaseBackend('Testing');
169  $subject->setCache($frontendMock);
170 
171  self::assertSame('myCachedContent', $subject->get('myIdentifier'));
172  }
173 
174  #[Test]
176  {
177  $frontendMock = $this->createMock(FrontendInterface::class);
178  $frontendMock->method('getIdentifier')->willReturn('pages');
179 
180  // Push a compressed row into db
181  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
182  'cache_pages',
183  [
184  'identifier' => 'myIdentifier',
185  'expires' => ‪$GLOBALS['EXEC_TIME'] + 60,
186  'content' => gzcompress('myCachedContent'),
187  ],
188  [
189  'content' => ‪Connection::PARAM_LOB,
190  ]
191  );
192 
193  // Have backend with compression enabled
194  $subject = new ‪Typo3DatabaseBackend('Testing', ['compression' => true]);
195  $subject->setCache($frontendMock);
196 
197  // Content comes back uncompressed
198  self::assertSame('myCachedContent', $subject->get('myIdentifier'));
199  }
200 
201  #[Test]
202  public function ‪getReturnsEmptyStringUnzipped(): void
203  {
204  $frontendMock = $this->createMock(FrontendInterface::class);
205  $frontendMock->method('getIdentifier')->willReturn('pages');
206 
207  // Push a compressed row into db
208  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
209  'cache_pages',
210  [
211  'identifier' => 'myIdentifier',
212  'expires' => ‪$GLOBALS['EXEC_TIME'] + 60,
213  'content' => gzcompress(''),
214  ],
215  [
216  'content' => ‪Connection::PARAM_LOB,
217  ]
218  );
219 
220  // Have backend with compression enabled
221  $subject = new ‪Typo3DatabaseBackend('Testing', ['compression' => true]);
222  $subject->setCache($frontendMock);
223 
224  // Content comes back uncompressed
225  self::assertSame('', $subject->get('myIdentifier'));
226  }
227 
228  #[Test]
230  {
231  $frontendMock = $this->createMock(FrontendInterface::class);
232  $frontendMock->method('getIdentifier')->willReturn('pages');
233 
234  $subject = new ‪Typo3DatabaseBackend('Testing');
235  $subject->setCache($frontendMock);
236 
237  self::assertFalse($subject->has('myIdentifier'));
238  }
239 
240  #[Test]
242  {
243  $frontendMock = $this->createMock(FrontendInterface::class);
244  $frontendMock->method('getIdentifier')->willReturn('pages');
245 
246  // Push an expired row into db
247  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
248  'cache_pages',
249  [
250  'identifier' => 'myIdentifier',
251  'expires' => ‪$GLOBALS['EXEC_TIME'] - 60,
252  'content' => 'myCachedContent',
253  ],
254  [
255  'content' => ‪Connection::PARAM_LOB,
256  ]
257  );
258 
259  $subject = new ‪Typo3DatabaseBackend('Testing');
260  $subject->setCache($frontendMock);
261 
262  self::assertFalse($subject->has('myIdentifier'));
263  }
264 
265  #[Test]
266  public function ‪hasReturnsNotExpiredCacheEntry(): void
267  {
268  $frontendMock = $this->createMock(FrontendInterface::class);
269  $frontendMock->method('getIdentifier')->willReturn('pages');
270 
271  // Push a row into db
272  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
273  'cache_pages',
274  [
275  'identifier' => 'myIdentifier',
276  'expires' => ‪$GLOBALS['EXEC_TIME'] + 60,
277  'content' => 'myCachedContent',
278  ],
279  [
280  'content' => ‪Connection::PARAM_LOB,
281  ]
282  );
283 
284  $subject = new ‪Typo3DatabaseBackend('Testing');
285  $subject->setCache($frontendMock);
286 
287  self::assertTrue($subject->has('myIdentifier'));
288  }
289 
290  #[Test]
292  {
293  $frontendMock = $this->createMock(FrontendInterface::class);
294  $frontendMock->method('getIdentifier')->willReturn('pages');
295 
296  $subject = new ‪Typo3DatabaseBackend('Testing');
297  $subject->setCache($frontendMock);
298 
299  self::assertFalse($subject->remove('myIdentifier'));
300  }
301 
302  #[Test]
304  {
305  $frontendMock = $this->createMock(FrontendInterface::class);
306  $frontendMock->method('getIdentifier')->willReturn('pages');
307 
308  // Push a row into db
309  (new ‪ConnectionPool())->getConnectionForTable('cache_pages')->insert(
310  'cache_pages',
311  [
312  'identifier' => 'myIdentifier',
313  'expires' => ‪$GLOBALS['EXEC_TIME'] + 60,
314  'content' => 'myCachedContent',
315  ],
316  [
317  'content' => ‪Connection::PARAM_LOB,
318  ]
319  );
320 
321  $subject = new ‪Typo3DatabaseBackend('Testing');
322  $subject->setCache($frontendMock);
323 
324  self::assertTrue($subject->remove('myIdentifier'));
325  }
326 
327  #[Test]
329  {
330  $frontendMock = $this->createMock(FrontendInterface::class);
331  $frontendMock->method('getIdentifier')->willReturn('pages');
332 
333  // Add one cache row to remove and another one that shouldn't be removed
334  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
335  $cacheTableConnection->bulkInsert(
336  'cache_pages',
337  [
338  ['myIdentifier', ‪$GLOBALS['EXEC_TIME'] + 60, 'myCachedContent'],
339  ['otherIdentifier', ‪$GLOBALS['EXEC_TIME'] + 60, 'otherCachedContent'],
340  ],
341  ['identifier', 'expires', 'content'],
342  [
343  'identifier' => ‪Connection::PARAM_STR,
344  'expires' => ‪Connection::PARAM_INT,
345  'content' => ‪Connection::PARAM_LOB,
346  ]
347  );
348  $subject = new ‪Typo3DatabaseBackend('Testing');
349  $subject->setCache($frontendMock);
350 
351  // Add a couple of tags
352  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
353  $tagsTableConnection->bulkInsert(
354  'cache_pages_tags',
355  [
356  ['myIdentifier', 'aTag'],
357  ['myIdentifier', 'otherTag'],
358  ['otherIdentifier', 'aTag'],
359  ['otherIdentifier', 'otherTag'],
360  ],
361  ['identifier', 'tag'],
362  [
363  'identifier' => ‪Connection::PARAM_STR,
364  'tag' => ‪Connection::PARAM_STR,
365  ]
366  );
367 
368  $subject->remove('myIdentifier');
369 
370  // cache row with removed identifier has been removed, other one exists
371  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'myIdentifier']));
372  self::assertSame(1, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'otherIdentifier']));
373 
374  // tags of myIdentifier should have been removed, others exist
375  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'myIdentifier']));
376  self::assertSame(2, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'otherIdentifier']));
377  }
378 
379  #[Test]
381  {
382  $subject = $this->‪getSubjectObject();
383 
384  self::assertEquals(['idA' => 'idA'], $subject->findIdentifiersByTag('tagA'));
385  self::assertEquals(['idA' => 'idA', 'idB' => 'idB'], $subject->findIdentifiersByTag('tagB'));
386  self::assertEquals(['idB' => 'idB', 'idC' => 'idC'], $subject->findIdentifiersByTag('tagC'));
387  }
388 
389  #[Test]
391  {
392  $subject = $this->‪getSubjectObject();
393  $subject->flushByTag('tagB');
394  }
395 
396  #[Test]
398  {
399  $subject = $this->‪getSubjectObject();
400  $subject->flushByTags(['tagB']);
401  }
402 
403  #[Test]
405  {
406  $subject = $this->‪getSubjectObject();
407  $subject->flushByTag('tagB');
408 
409  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
410  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idA']));
411  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idB']));
412  self::assertSame(1, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idC']));
413  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
414  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idA']));
415  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idB']));
416  self::assertSame(2, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idC']));
417  }
418 
419  #[Test]
421  {
422  $subject = $this->‪getSubjectObject();
423  $subject->flushByTags(['tagC', 'tagD']);
424 
425  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
426  self::assertSame(1, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idA']));
427  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idB']));
428  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idC']));
429  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
430  self::assertSame(2, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idA']));
431  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idB']));
432  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idC']));
433  }
434 
435  #[Test]
436  public function ‪collectGarbageWorksWithEmptyTable(): void
437  {
438  $subject = $this->‪getSubjectObject();
439  $subject->collectGarbage();
440  }
441 
442  #[Test]
444  {
445  $frontendMock = $this->createMock(FrontendInterface::class);
446  $frontendMock->method('getIdentifier')->willReturn('pages');
447 
448  $subject = new ‪Typo3DatabaseBackend('Testing');
449  $subject->setCache($frontendMock);
450 
451  // idA should be expired after EXEC_TIME manipulation, idB should stay
452  $subject->set('idA', 'dataA', [], 60);
453  $subject->set('idB', 'dataB', [], 240);
454 
455  ‪$GLOBALS['EXEC_TIME'] = ‪$GLOBALS['EXEC_TIME'] + 120;
456 
457  $subject->collectGarbage();
458 
459  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
460  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idA']));
461  self::assertSame(1, $cacheTableConnection->count('*', 'cache_pages', ['identifier' => 'idB']));
462  }
463 
464  #[Test]
466  {
467  $frontendMock = $this->createMock(FrontendInterface::class);
468  $frontendMock->method('getIdentifier')->willReturn('pages');
469 
470  $subject = new ‪Typo3DatabaseBackend('Testing');
471  $subject->setCache($frontendMock);
472 
473  // tag rows tagA and tagB should be removed by garbage collector after EXEC_TIME manipulation
474  $subject->set('idA', 'dataA', ['tagA', 'tagB'], 60);
475  $subject->set('idB', 'dataB', ['tagB', 'tagC'], 240);
476 
477  ‪$GLOBALS['EXEC_TIME'] = ‪$GLOBALS['EXEC_TIME'] + 120;
478 
479  $subject->collectGarbage();
480 
481  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
482  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idA']));
483  self::assertSame(2, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idB']));
484  }
485 
486  #[Test]
488  {
489  $frontendMock = $this->createMock(FrontendInterface::class);
490  $frontendMock->method('getIdentifier')->willReturn('pages');
491 
492  $subject = new ‪Typo3DatabaseBackend('Testing');
493  $subject->setCache($frontendMock);
494 
495  // tag rows tagA and tagB should be removed by garbage collector after EXEC_TIME manipulation
496  $subject->set('idA', 'dataA', ['tagA', 'tagB'], 60);
497  $subject->set('idB', 'dataB', ['tagB', 'tagC'], 240);
498 
499  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
500 
501  // Push two orphaned tag row into db - tags that have no related cache record anymore for whatever reason
502  $tagsTableConnection->insert(
503  'cache_pages_tags',
504  [
505  'identifier' => 'idC',
506  'tag' => 'tagC',
507  ]
508  );
509  $tagsTableConnection->insert(
510  'cache_pages_tags',
511  [
512  'identifier' => 'idC',
513  'tag' => 'tagD',
514  ]
515  );
516 
517  ‪$GLOBALS['EXEC_TIME'] = ‪$GLOBALS['EXEC_TIME'] + 120;
518 
519  $subject->collectGarbage();
520 
521  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idA']));
522  self::assertSame(2, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idB']));
523  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', ['identifier' => 'idC']));
524  }
525 
526  #[Test]
527  public function ‪flushLeavesCacheAndTagsTableEmpty(): void
528  {
529  $frontendMock = $this->createMock(FrontendInterface::class);
530  $frontendMock->method('getIdentifier')->willReturn('pages');
531 
532  $subject = new ‪Typo3DatabaseBackend('Testing');
533  $subject->setCache($frontendMock);
534 
535  $subject->set('idA', 'dataA', ['tagA', 'tagB']);
536 
537  $subject->flush();
538 
539  $cacheTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages');
540  $tagsTableConnection = (new ‪ConnectionPool())->getConnectionForTable('cache_pages_tags');
541  self::assertSame(0, $cacheTableConnection->count('*', 'cache_pages', []));
542  self::assertSame(0, $tagsTableConnection->count('*', 'cache_pages_tags', []));
543  }
544 
546  {
547  $frontendMock = $this->createMock(FrontendInterface::class);
548  $frontendMock->method('getIdentifier')->willReturn('pages');
549 
550  $subject = new ‪Typo3DatabaseBackend('Testing');
551  $subject->setCache($frontendMock);
552 
553  $subject->set('idA', 'dataA', ['tagA', 'tagB']);
554  $subject->set('idB', 'dataB', ['tagB', 'tagC']);
555  $subject->set('idC', 'dataC', ['tagC', 'tagD']);
556 
557  return $subject;
558  }
559 }
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsFalseIfNoCacheEntryExists
‪getReturnsFalseIfNoCacheEntryExists()
Definition: Typo3DatabaseBackendTest.php:113
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\flushByTagsRemovesCorrectRowsFromDatabase
‪flushByTagsRemovesCorrectRowsFromDatabase()
Definition: Typo3DatabaseBackendTest.php:420
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\hasReturnsNotExpiredCacheEntry
‪hasReturnsNotExpiredCacheEntry()
Definition: Typo3DatabaseBackendTest.php:266
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsNotExpiredCacheEntry
‪getReturnsNotExpiredCacheEntry()
Definition: Typo3DatabaseBackendTest.php:150
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\$configurationToUseInTestInstance
‪array $configurationToUseInTestInstance
Definition: Typo3DatabaseBackendTest.php:29
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend
Definition: ApcuBackendTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\removeRemovesCorrectEntriesFromDatabase
‪removeRemovesCorrectEntriesFromDatabase()
Definition: Typo3DatabaseBackendTest.php:328
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\collectGarbageRemovesTagEntriesForCacheEntriesWithExpiredLifetime
‪collectGarbageRemovesTagEntriesForCacheEntriesWithExpiredLifetime()
Definition: Typo3DatabaseBackendTest.php:465
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\findIdentifiersByTagReturnsIdentifierTaggedWithGivenTag
‪findIdentifiersByTagReturnsIdentifierTaggedWithGivenTag()
Definition: Typo3DatabaseBackendTest.php:380
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsEmptyStringUnzipped
‪getReturnsEmptyStringUnzipped()
Definition: Typo3DatabaseBackendTest.php:202
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\collectGarbageRemovesCacheEntryWithExpiredLifetime
‪collectGarbageRemovesCacheEntryWithExpiredLifetime()
Definition: Typo3DatabaseBackendTest.php:443
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\removeReturnsFalseIfNoEntryHasBeenRemoved
‪removeReturnsFalseIfNoEntryHasBeenRemoved()
Definition: Typo3DatabaseBackendTest.php:291
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsUnzipsNotExpiredCacheEntry
‪getReturnsUnzipsNotExpiredCacheEntry()
Definition: Typo3DatabaseBackendTest.php:175
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsFalseForExpiredCacheEntry
‪getReturnsFalseForExpiredCacheEntry()
Definition: Typo3DatabaseBackendTest.php:125
‪TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend
Definition: Typo3DatabaseBackend.php:30
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\hasReturnsFalseForExpiredCacheEntry
‪hasReturnsFalseForExpiredCacheEntry()
Definition: Typo3DatabaseBackendTest.php:241
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsPreviouslySetEntryWithNewContentIfSetWasCalledMultipleTimes
‪getReturnsPreviouslySetEntryWithNewContentIfSetWasCalledMultipleTimes()
Definition: Typo3DatabaseBackendTest.php:56
‪TYPO3\CMS\Core\Database\Connection\PARAM_STR
‪const PARAM_STR
Definition: Connection.php:57
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getReturnsPreviouslySetEntry
‪getReturnsPreviouslySetEntry()
Definition: Typo3DatabaseBackendTest.php:43
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\flushLeavesCacheAndTagsTableEmpty
‪flushLeavesCacheAndTagsTableEmpty()
Definition: Typo3DatabaseBackendTest.php:527
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\flushByTagWorksWithEmptyCacheTables
‪flushByTagWorksWithEmptyCacheTables()
Definition: Typo3DatabaseBackendTest.php:390
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\flushByTagRemovesCorrectRowsFromDatabase
‪flushByTagRemovesCorrectRowsFromDatabase()
Definition: Typo3DatabaseBackendTest.php:404
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\setInsertsDataWithTagsIntoCacheTable
‪setInsertsDataWithTagsIntoCacheTable()
Definition: Typo3DatabaseBackendTest.php:70
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\collectGarbageWorksWithEmptyTable
‪collectGarbageWorksWithEmptyTable()
Definition: Typo3DatabaseBackendTest.php:436
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\getSubjectObject
‪getSubjectObject()
Definition: Typo3DatabaseBackendTest.php:545
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\flushByTagsWorksWithEmptyCacheTables
‪flushByTagsWorksWithEmptyCacheTables()
Definition: Typo3DatabaseBackendTest.php:397
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\collectGarbageRemovesOrphanedTagEntriesFromTagsTable
‪collectGarbageRemovesOrphanedTagEntriesFromTagsTable()
Definition: Typo3DatabaseBackendTest.php:487
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
Definition: FrontendInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\setStoresCompressedContent
‪setStoresCompressedContent()
Definition: Typo3DatabaseBackendTest.php:88
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest
Definition: Typo3DatabaseBackendTest.php:28
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\hasReturnsFalseIfNoCacheEntryExists
‪hasReturnsFalseIfNoCacheEntryExists()
Definition: Typo3DatabaseBackendTest.php:229
‪TYPO3\CMS\Core\Database\Connection\PARAM_LOB
‪const PARAM_LOB
Definition: Connection.php:62
‪TYPO3\CMS\Core\Tests\Functional\Cache\Backend\Typo3DatabaseBackendTest\removeReturnsTrueIfAnEntryHasBeenRemoved
‪removeReturnsTrueIfAnEntryHasBeenRemoved()
Definition: Typo3DatabaseBackendTest.php:303