Skip to content

Commit 3f6a0fd

Browse files
committed
Solution 5: WHERE EXISTS (SUBQUERY)
1 parent 1d1a08d commit 3f6a0fd

File tree

3 files changed

+15
-18
lines changed

3 files changed

+15
-18
lines changed

eZ/Publish/Core/Limitation/ObjectStateLimitationType.php

+1-3
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,11 @@ public function getCriterion(APILimitationValue $value, APIUserReference $curren
213213
throw new RuntimeException('$value->limitationValues is empty');
214214
}
215215

216-
if (count($value->limitationValues) === 1) {
216+
if (!isset($value->limitationValues[1])) {
217217
// 1 limitation value: EQ operation
218218
return new Criterion\ObjectStateId($value->limitationValues[0]);
219219
}
220220

221-
return new Criterion\ObjectStateId($value->limitationValues);
222-
223221
$groupedLimitationValues = $this->groupLimitationValues($value->limitationValues);
224222

225223
if (count($groupedLimitationValues) === 1) {

eZ/Publish/Core/Persistence/Legacy/Filter/CriterionQueryBuilder/Content/ObjectStateIdQueryBuilder.php

+10-15
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,23 @@ public function buildQueryConstraint(
3030
FilteringCriterion $criterion
3131
): ?string {
3232
$value = (array)$criterion->value;
33-
$tableAlias = uniqid('osl_');
3433

35-
/** @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion\ObjectStateId $criterion */
36-
$queryBuilder
37-
->leftJoinOnce(
38-
'content',
34+
$subSelect = $queryBuilder->getConnection()->createQueryBuilder()
35+
->select(
36+
'osl.contentobject_id'
37+
)->from(
3938
Gateway::OBJECT_STATE_LINK_TABLE,
40-
$tableAlias,
41-
(string) $queryBuilder->expr()->and(
42-
$queryBuilder->expr()->eq(
43-
'content.id',
44-
$tableAlias . '.contentobject_id'
45-
),
39+
'osl'
40+
)->andWhere(
41+
$queryBuilder->expr()->and(
42+
$queryBuilder->expr()->eq('osl.contentobject_id', 'content.id'),
4643
$queryBuilder->expr()->in(
47-
$tableAlias . '.contentobject_state_id',
44+
'osl.contentobject_state_id',
4845
$queryBuilder->createNamedParameter($value, Connection::PARAM_INT_ARRAY)
4946
)
5047
)
5148
);
5249

53-
return $queryBuilder->expr()->isNotNull(
54-
$tableAlias . '.contentobject_state_id',
55-
);
50+
return sprintf('EXISTS(%s)', $subSelect->getSQL());
5651
}
5752
}

eZ/Publish/Core/settings/storage_engines/legacy/filter/query_builders.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ services:
99
eZ\Publish\Core\Persistence\Legacy\Filter\CriterionQueryBuilder\:
1010
resource: '../../../../Persistence/Legacy/Filter/CriterionQueryBuilder/*'
1111

12+
# eZ\Publish\Core\Persistence\Legacy\Filter\CriterionQueryBuilder\Content\ObjectStateIdQueryBuilder:
13+
# arguments:
14+
# $objectStateHandler: '@ezpublish.spi.persistence.object_state_handler'
15+
1216
eZ\Publish\Core\Persistence\Legacy\Filter\SortClauseQueryBuilder\:
1317
resource: '../../../../Persistence/Legacy/Filter/SortClauseQueryBuilder/*'
1418

0 commit comments

Comments
 (0)