diff options
author | Louis Chemineau <louis@chmn.me> | 2025-04-29 18:17:23 +0200 |
---|---|---|
committer | Louis Chemineau <louis@chmn.me> | 2025-04-29 18:17:23 +0200 |
commit | 5c73f2c37f04a0d63087af462e445c83471ee580 (patch) | |
tree | f582d891669bcfff1d76b29b641e5af9522d63ed | |
parent | f26dc79480e75b0dc2f80c9dfc08fada0f6beb68 (diff) | |
download | nextcloud-server-artonge/fix/forward_extra.tar.gz nextcloud-server-artonge/fix/forward_extra.zip |
fix: Forward 'extra' argument when optimizing queryartonge/fix/forward_extra
This allows DAV SEARCH queries containing optimizable comparisons on files metadata like:
```xml
<d:or>
<d:eq>
<d:prop>
<nc:metadata-photos-place />
</d:prop>
<d:literal>La Valette-du-Var</d:literal>
</d:eq>
<d:eq>
<d:prop>
<nc:metadata-photos-place />
</d:prop>
<d:literal>Évenos</d:literal>
</d:eq>
</d:or>
```
Signed-off-by: Louis Chemineau <louis@chmn.me>
-rw-r--r-- | lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php | 2 | ||||
-rw-r--r-- | lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php index 3f2b36823ab..42d960cc22a 100644 --- a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php +++ b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php @@ -32,7 +32,7 @@ class OrEqualsToIn extends ReplacingOptimizerStep { $value = $comparison->getValue(); return $value; }, $group); - $in = new SearchComparison(ISearchComparison::COMPARE_IN, $field, $values); + $in = new SearchComparison(ISearchComparison::COMPARE_IN, $field, $values, $group[0]->getExtra()); $pathEqHash = array_reduce($group, function ($pathEqHash, ISearchComparison $comparison) { return $comparison->getQueryHint(ISearchComparison::HINT_PATH_EQ_HASH, true) && $pathEqHash; }, true); diff --git a/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php b/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php index 5c7655b49c1..3e5258a715f 100644 --- a/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php +++ b/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php @@ -24,7 +24,7 @@ class SplitLargeIn extends ReplacingOptimizerStep { ) { $chunks = array_chunk($operator->getValue(), 1000); $chunkComparisons = array_map(function (array $values) use ($operator) { - return new SearchComparison(ISearchComparison::COMPARE_IN, $operator->getField(), $values); + return new SearchComparison(ISearchComparison::COMPARE_IN, $operator->getField(), $values, $operator->getExtra()); }, $chunks); $operator = new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_OR, $chunkComparisons); |