/** * Converts the criteria into query fragments * * @throws \RuntimeException if Criterion is not applicable to its target * * @param string $fieldTypeIdentifier * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param string $column * * @return \eZ\Publish\Core\Persistence\Database\Expression */ public function convertCriteria($fieldTypeIdentifier, SelectQuery $query, Criterion $criterion, $column) { if ($this->registry->has($fieldTypeIdentifier)) { return $this->registry->get($fieldTypeIdentifier)->handle($query, $criterion, $column); } if ($this->defaultHandler === null) { throw new RuntimeException("No conversion for a field type '{$fieldTypeIdentifier}' found."); } return $this->defaultHandler->handle($query, $criterion, $column); }
/** * Generates query expression for operator and value of a Field Criterion. * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param string $column * * @return \eZ\Publish\Core\Persistence\Database\Expression */ public function handle(SelectQuery $query, Criterion $criterion, $column) { switch ($criterion->operator) { case Criterion\Operator::CONTAINS: $filter = $query->expr->eq($this->dbHandler->quoteColumn($column), $query->bindValue($this->lowerCase($criterion->value))); break; default: $filter = parent::handle($query, $criterion, $column); } return $filter; }
/** * Generates query expression for operator and value of a Field Criterion. * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param string $column * * @return \eZ\Publish\Core\Persistence\Database\Expression */ public function handle(SelectQuery $query, Criterion $criterion, $column) { switch ($criterion->operator) { case Criterion\Operator::CONTAINS: $quotedColumn = $this->dbHandler->quoteColumn($column); $value = $this->lowerCase($criterion->value); $filter = $query->expr->lOr(array($query->expr->eq($quotedColumn, $query->bindValue($value, null, \PDO::PARAM_STR)), $query->expr->like($quotedColumn, $query->bindValue("%" . $this->separator . $value, null, \PDO::PARAM_STR)), $query->expr->like($quotedColumn, $query->bindValue($value . $this->separator . "%", null, \PDO::PARAM_STR)), $query->expr->like($quotedColumn, $query->bindValue("%" . $this->separator . $value . $this->separator . "%", null, \PDO::PARAM_STR)))); break; default: $filter = parent::handle($query, $criterion, $column); } return $filter; }