summaryrefslogtreecommitdiffstats
path: root/vendor/ipl/orm/src/Compat/FilterProcessor.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ipl/orm/src/Compat/FilterProcessor.php')
-rw-r--r--vendor/ipl/orm/src/Compat/FilterProcessor.php13
1 files changed, 13 insertions, 0 deletions
diff --git a/vendor/ipl/orm/src/Compat/FilterProcessor.php b/vendor/ipl/orm/src/Compat/FilterProcessor.php
index 7956898..361aabb 100644
--- a/vendor/ipl/orm/src/Compat/FilterProcessor.php
+++ b/vendor/ipl/orm/src/Compat/FilterProcessor.php
@@ -139,6 +139,13 @@ class FilterProcessor extends \ipl\Sql\Compat\FilterProcessor
if (! $behaviorsApplied) {
$rewrittenFilter = $subjectBehaviors->rewriteCondition($filter, $path . '.');
if ($rewrittenFilter !== null) {
+ if (
+ $rewrittenFilter instanceof MetaDataProvider
+ && $rewrittenFilter->metaData()->get('forceResolved', false)
+ ) {
+ return $rewrittenFilter;
+ }
+
return $this->requireAndResolveFilterColumns($rewrittenFilter, $query, $forceOptimization)
?: $rewrittenFilter;
}
@@ -328,6 +335,12 @@ class FilterProcessor extends \ipl\Sql\Compat\FilterProcessor
$subQuerySelect->having(["COUNT(DISTINCT $targetKeys) >= ?" => $count]);
$subQuerySelect->groupBy(array_values($subQuerySelect->getColumns()));
+
+ if ($negate) {
+ $subQuerySelect->where(array_map(function ($k) {
+ return $k . ' IS NOT NULL';
+ }, array_values($subQuerySelect->getColumns())));
+ }
}
// TODO: Qualification is only necessary since the `In` and `NotIn` conditions are ignored by