diff options
author | Robin Appelman <robin@icewind.nl> | 2023-09-22 10:17:18 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2024-02-15 17:55:42 +0100 |
commit | 2dcd0a875920be09944dc51f360303c11f3e858a (patch) | |
tree | d07a4bb8a6a15f88e8a2b089bcde8a9f0e4647a2 /lib/private/Files/Search | |
parent | 2e14a7a4a6efb5444fb65e0c2368e3420d024d90 (diff) | |
download | nextcloud-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.php | 1 | ||||
-rw-r--r-- | lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php | 8 |
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]; } |