26 private $conditionManager;
36 private $preprocessor;
53 RequestFilterInterface::TYPE_RANGE => $range,
54 RequestFilterInterface::TYPE_TERM => $term,
55 RequestFilterInterface::TYPE_WILDCARD => $wildcard,
57 $this->conditionManager = $conditionManager;
58 $this->preprocessor = $preprocessor;
64 public function build(RequestFilterInterface $filter, $conditionType)
66 return $this->processFilter($filter, $this->isNegation($conditionType));
76 private function processFilter(RequestFilterInterface $filter, $isNegation)
78 if ($filter->getType() === RequestFilterInterface::TYPE_BOOL) {
79 $query = $this->processBoolFilter($filter, $isNegation);
82 if (!isset($this->filters[$filter->getType()])) {
83 throw new \InvalidArgumentException(
'Unknown filter type ' . $filter->getType());
85 $query = $this->filters[$filter->getType()]->buildFilter($filter, $isNegation);
86 $query = $this->preprocessor->process($filter, $isNegation,
$query);
99 private function processBoolFilter(RequestFilterInterface $filter, $isNegation)
101 $must = $this->buildFilters($filter->getMust(),
Select::SQL_AND, $isNegation);
102 $should = $this->buildFilters($filter->getShould(),
Select::SQL_OR, $isNegation);
103 $mustNot = $this->buildFilters(
104 $filter->getMustNot(),
111 $this->conditionManager->wrapBrackets($should),
112 $this->conditionManager->wrapBrackets($mustNot),
115 return $this->conditionManager->combineQueries($queries,
Select::SQL_AND);
126 private function buildFilters(array $filters, $unionOperator, $isNegation)
129 foreach ($filters as $filter) {
130 $filterQuery = $this->processFilter($filter, $isNegation);
131 $queries[] = $this->conditionManager->wrapBrackets($filterQuery);
133 return $this->conditionManager->combineQueries($queries, $unionOperator);
142 private function isNegation($conditionType)
build(RequestFilterInterface $filter, $conditionType)
__construct(Range $range, Term $term, Wildcard $wildcard, ConditionManager $conditionManager, PreprocessorInterface $preprocessor)
const QUERY_CONDITION_NOT