/src/Query/Mysql/Round.php
PHP | 43 lines | 32 code | 9 blank | 2 comment | 2 complexity | 53a5925ed038fe24f1fc6340d09cb00b MD5 | raw file
Possible License(s): BSD-3-Clause
- <?php
- namespace DoctrineExtensions\Query\Mysql;
- use Doctrine\ORM\Query\AST\Functions\FunctionNode;
- use Doctrine\ORM\Query\Lexer;
- class Round extends FunctionNode
- {
- private $firstExpression = null;
- private $secondExpression = null;
- public function parse(\Doctrine\ORM\Query\Parser $parser)
- {
- $lexer = $parser->getLexer();
- $parser->match(Lexer::T_IDENTIFIER);
- $parser->match(Lexer::T_OPEN_PARENTHESIS);
- $this->firstExpression = $parser->SimpleArithmeticExpression();
- // parse second parameter if available
- if (Lexer::T_COMMA === $lexer->lookahead['type']) {
- $parser->match(Lexer::T_COMMA);
- $this->secondExpression = $parser->ArithmeticPrimary();
- }
- $parser->match(Lexer::T_CLOSE_PARENTHESIS);
- }
- public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
- {
- // use second parameter if parsed
- if (null !== $this->secondExpression) {
- return 'ROUND('
- . $this->firstExpression->dispatch($sqlWalker)
- . ', '
- . $this->secondExpression->dispatch($sqlWalker)
- . ')';
- }
- return 'ROUND(' . $this->firstExpression->dispatch($sqlWalker) . ')';
- }
- }