eZ\Publish\Core\Search\Legacy\Content\Common\Gateway\SortClauseHandler\MapLocationDistance::applySelect PHP Method

applySelect() public method

Returns the name of the (aliased) column, which information should be used for sorting.
public applySelect ( eZ\Publish\Core\Persistence\Database\SelectQuery $query, eZ\Publish\API\Repository\Values\Content\Query\SortClause $sortClause, integer $number ) : string
$query eZ\Publish\Core\Persistence\Database\SelectQuery
$sortClause eZ\Publish\API\Repository\Values\Content\Query\SortClause
$number integer
return string
    public function applySelect(SelectQuery $query, SortClause $sortClause, $number)
    {
        /** @var \eZ\Publish\API\Repository\Values\Content\Query\SortClause\Target\MapLocationTarget $target */
        $target = $sortClause->targetData;
        $externalTable = $this->getSortTableName($number, 'ezgmaplocation');
        /*
         * Note: this formula is precise only for short distances.
         */
        $longitudeCorrectionByLatitude = pow(cos(deg2rad($target->latitude)), 2);
        $distanceExpression = $query->expr->add($query->expr->mul($query->expr->sub($this->dbHandler->quoteColumn('latitude', $externalTable), $query->bindValue($target->latitude)), $query->expr->sub($this->dbHandler->quoteColumn('latitude', $externalTable), $query->bindValue($target->latitude))), $query->expr->mul($query->expr->sub($this->dbHandler->quoteColumn('longitude', $externalTable), $query->bindValue($target->longitude)), $query->expr->sub($this->dbHandler->quoteColumn('longitude', $externalTable), $query->bindValue($target->longitude)), $query->bindValue($longitudeCorrectionByLatitude)));
        $query->select($query->alias($distanceExpression, $column1 = $this->getSortColumnName($number)));
        return array($column1);
    }