[TASK] Remove ext:dbal from installation steps
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Database / Query / Restriction / RootLevelRestriction.php
1 <?php
2 declare (strict_types = 1);
3 namespace TYPO3\CMS\Core\Database\Query\Restriction;
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
18 use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;
19 use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
20
21 /**
22 * Restriction to filter records which are not stored on the root page.
23 */
24 class RootLevelRestriction implements QueryRestrictionInterface
25 {
26 /**
27 * @var array
28 */
29 protected $tableNames;
30
31 /**
32 * @param array $tableNames
33 */
34 public function __construct(array $tableNames = [])
35 {
36 $this->tableNames = $tableNames;
37 }
38
39 /**
40 * Main method to build expressions for given tables
41 *
42 * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias
43 * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with
44 * @return CompositeExpression The result of query builder expression(s)
45 */
46 public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder): CompositeExpression
47 {
48 $constraints = [];
49 foreach ($queriedTables as $tableName => $tableAlias) {
50 $tablePrefix = $tableAlias ?: $tableName;
51 if (empty($this->tableNames) || in_array($tablePrefix, $this->tableNames, true)) {
52 $constraints[] = $expressionBuilder->eq(
53 $tablePrefix . '.pid',
54 0
55 );
56 }
57 }
58 return $expressionBuilder->andX(...$constraints);
59 }
60 }