. */ declare(strict_types=1); namespace App\Doctrine\Functions; use Doctrine\DBAL\Driver\AbstractPostgreSQLDriver; use Doctrine\DBAL\Platforms\MariaDBPlatform; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\AST\Node; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\SqlWalker; use Doctrine\ORM\Query\TokenType; class Natsort extends FunctionNode { private Node $field; public function parse(Parser $parser): void { $parser->match(TokenType::T_IDENTIFIER); $parser->match(TokenType::T_OPEN_PARENTHESIS); $this->field = $parser->ArithmeticExpression(); $parser->match(TokenType::T_CLOSE_PARENTHESIS); } public function getSql(SqlWalker $sqlWalker): string { $platform = $sqlWalker->getConnection()->getDatabasePlatform(); if ($platform instanceof AbstractPostgreSQLDriver) { return $this->field->dispatch($sqlWalker) . ' COLLATE numeric'; } if ($platform instanceof MariaDBPlatform && $sqlWalker->getConnection()->getServerVersion()) { } //For every other platform, return the field as is return $this->field->dispatch($sqlWalker); } }