diff --git a/library/Icinga/Repository/DbRepository.php b/library/Icinga/Repository/DbRepository.php index 5c946d173..379a754cf 100644 --- a/library/Icinga/Repository/DbRepository.php +++ b/library/Icinga/Repository/DbRepository.php @@ -688,19 +688,20 @@ abstract class DbRepository extends Repository implements Extensible, Updatable, * @param string $name The name or alias of the column to validate * @param RepositoryQuery $query An optional query to pass as context, * if not given the column is considered being used for a statement filter + * @param FilterExpression $filter An optional filter to pass as context * * @return string The given column's name * * @throws QueryException In case the given column is not a valid filter column */ - public function requireFilterColumn($table, $name, RepositoryQuery $query = null) + public function requireFilterColumn($table, $name, RepositoryQuery $query = null, FilterExpression $filter = null) { if ($query === null) { return $this->requireStatementColumn($table, $name); } if ($this->validateQueryColumnAssociation($table, $name)) { - return parent::requireFilterColumn($table, $name, $query); + return parent::requireFilterColumn($table, $name, $query, $filter); } return $this->joinColumn($name, $table, $query); diff --git a/library/Icinga/Repository/Repository.php b/library/Icinga/Repository/Repository.php index 680b36def..824f5c78b 100644 --- a/library/Icinga/Repository/Repository.php +++ b/library/Icinga/Repository/Repository.php @@ -6,6 +6,7 @@ namespace Icinga\Repository; use DateTime; use Icinga\Application\Logger; use Icinga\Data\Filter\Filter; +use Icinga\Data\Filter\FilterExpression; use Icinga\Data\Selectable; use Icinga\Exception\ProgrammingError; use Icinga\Exception\QueryException; @@ -872,7 +873,7 @@ abstract class Repository implements Selectable if ($filter->isExpression()) { $column = $filter->getColumn(); - $filter->setColumn($this->requireFilterColumn($table, $column, $query)); + $filter->setColumn($this->requireFilterColumn($table, $column, $query, $filter)); $filter->setExpression($this->persistColumn($table, $column, $filter->getExpression(), $query)); } elseif ($filter->isChain()) { foreach ($filter->filters() as $chainOrExpression) { @@ -1049,12 +1050,13 @@ abstract class Repository implements Selectable * @param string $table The table where to look for the column or alias * @param string $name The name or alias of the column to validate * @param RepositoryQuery $query An optional query to pass as context (unused by the base implementation) + * @param FilterExpression $filter An optional filter to pass as context (unused by the base implementation) * * @return string The given column's name * * @throws QueryException In case the given column is not a valid filter column */ - public function requireFilterColumn($table, $name, RepositoryQuery $query = null) + public function requireFilterColumn($table, $name, RepositoryQuery $query = null, FilterExpression $filter = null) { if (($column = $this->resolveQueryColumnAlias($table, $name)) !== null) { $alias = $name; diff --git a/library/Icinga/Repository/RepositoryQuery.php b/library/Icinga/Repository/RepositoryQuery.php index d227d9fde..af6643199 100644 --- a/library/Icinga/Repository/RepositoryQuery.php +++ b/library/Icinga/Repository/RepositoryQuery.php @@ -206,10 +206,7 @@ class RepositoryQuery implements QueryInterface, SortRules, FilterColumns, Itera */ public function where($column, $value = null) { - $this->query->where( - $this->repository->requireFilterColumn($this->target, $column, $this), - $this->repository->persistColumn($this->target, $column, $value, $this) - ); + $this->addFilter(Filter::where($column, $value)); return $this; }