aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files/Search
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2023-09-22 10:17:18 +0200
committerRobin Appelman <robin@icewind.nl>2024-02-15 17:55:42 +0100
commit2dcd0a875920be09944dc51f360303c11f3e858a (patch)
treed07a4bb8a6a15f88e8a2b089bcde8a9f0e4647a2 /lib/private/Files/Search
parent2e14a7a4a6efb5444fb65e0c2368e3420d024d90 (diff)
downloadnextcloud-server-2dcd0a875920be09944dc51f360303c11f3e858a.tar.gz
nextcloud-server-2dcd0a875920be09944dc51f360303c11f3e858a.zip
hopefully improve propagation of 'path eq hash' hint into 'in' statements
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Files/Search')
-rw-r--r--lib/private/Files/Search/QueryOptimizer/FlattenNestedBool.php1
-rw-r--r--lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php8
2 files changed, 5 insertions, 4 deletions
diff --git a/lib/private/Files/Search/QueryOptimizer/FlattenNestedBool.php b/lib/private/Files/Search/QueryOptimizer/FlattenNestedBool.php
index 7f75731fe94..c573e3af3c0 100644
--- a/lib/private/Files/Search/QueryOptimizer/FlattenNestedBool.php
+++ b/lib/private/Files/Search/QueryOptimizer/FlattenNestedBool.php
@@ -26,5 +26,4 @@ class FlattenNestedBool extends QueryOptimizerStep {
}
parent::processOperator($operator);
}
-
}
diff --git a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php
index 550d85fbda0..d39eb2e29a9 100644
--- a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php
+++ b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php
@@ -29,7 +29,10 @@ class OrEqualsToIn extends ReplacingOptimizerStep {
return $value;
}, $group);
$in = new SearchComparison(ISearchComparison::COMPARE_IN, $field, $values);
- $in->setQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, $group[0]->getQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, true));
+ $pathEqHash = array_reduce($group, function ($pathEqHash, ISearchComparison $comparison) {
+ return $comparison->getQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, true) && $pathEqHash;
+ }, true);
+ $in->setQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, $pathEqHash);
return $in;
} else {
return $group[0];
@@ -57,8 +60,7 @@ class OrEqualsToIn extends ReplacingOptimizerStep {
$result = [];
foreach ($operators as $operator) {
if ($operator instanceof ISearchComparison && $operator->getType() === ISearchComparison::COMPARE_EQUAL) {
- $key = $operator->getField() . $operator->getQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, true);
- $result[$key][] = $operator;
+ $result[$operator->getField()][] = $operator;
} else {
$result[] = [$operator];
}