From 1c87cee5ad8754aec87cb1749f5a495cd8d80961 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 6 Feb 2024 14:31:21 +0100 Subject: [PATCH] add extra flatten step to improve "or eq" -> "in" optimization Signed-off-by: Robin Appelman --- lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php | 1 + tests/lib/Files/Search/QueryOptimizer/OrEqualsToInTest.php | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php b/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php index 86cd784b760..46d27e38081 100644 --- a/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php +++ b/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php @@ -35,6 +35,7 @@ class QueryOptimizer { new PathPrefixOptimizer(), new MergeDistributiveOperations(), new FlattenSingleArgumentBinaryOperation(), + new FlattenNestedBool(), new OrEqualsToIn(), new FlattenNestedBool(), new SplitLargeIn(), diff --git a/tests/lib/Files/Search/QueryOptimizer/OrEqualsToInTest.php b/tests/lib/Files/Search/QueryOptimizer/OrEqualsToInTest.php index 23b2a6ca07a..3d3160079cd 100644 --- a/tests/lib/Files/Search/QueryOptimizer/OrEqualsToInTest.php +++ b/tests/lib/Files/Search/QueryOptimizer/OrEqualsToInTest.php @@ -83,16 +83,16 @@ class OrEqualsToInTest extends TestCase { ISearchBinaryOperator::OPERATOR_OR, [ new SearchComparison(ISearchComparison::COMPARE_EQUAL, "path", "foo"), + new SearchComparison(ISearchComparison::COMPARE_LIKE, "path", "foo%"), new SearchComparison(ISearchComparison::COMPARE_EQUAL, "path", "bar"), - new SearchComparison(ISearchComparison::COMPARE_LIKE, "path", "asd%"), ] ); - $this->assertEquals('(path eq "foo" or path eq "bar" or path like "asd%")', $operator->__toString()); + $this->assertEquals('(path eq "foo" or path like "foo%" or path eq "bar")', $operator->__toString()); $this->optimizer->processOperator($operator); $this->simplifier->processOperator($operator); - $this->assertEquals('(path in ["foo","bar"] or path like "asd%")', $operator->__toString()); + $this->assertEquals('(path in ["foo","bar"] or path like "foo%")', $operator->__toString()); } public function testOrsInside() {