diff options
Diffstat (limited to 'lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php')
-rw-r--r-- | lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php b/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php new file mode 100644 index 00000000000..5259ca25ad3 --- /dev/null +++ b/lib/private/Files/Search/QueryOptimizer/QueryOptimizer.php @@ -0,0 +1,38 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OC\Files\Search\QueryOptimizer; + +use OCP\Files\Search\ISearchOperator; + +class QueryOptimizer { + /** @var QueryOptimizerStep[] */ + private $steps = []; + + public function __construct() { + // note that the order here is relevant + $this->steps = [ + new PathPrefixOptimizer(), + new MergeDistributiveOperations(), + new FlattenSingleArgumentBinaryOperation(), + new FlattenNestedBool(), + new OrEqualsToIn(), + new FlattenNestedBool(), + new SplitLargeIn(), + ]; + } + + public function processOperator(ISearchOperator &$operator) { + foreach ($this->steps as $step) { + $step->inspectOperator($operator); + } + foreach ($this->steps as $step) { + $step->processOperator($operator); + } + } +} |