PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Query/Mysql/Rand.php

https://github.com/beberlei/DoctrineExtensions
PHP | 37 lines | 26 code | 8 blank | 3 comment | 2 complexity | d75a5cd3e588e965c4e0b0045e8ec6f8 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. namespace DoctrineExtensions\Query\Mysql;
  3. use Doctrine\ORM\Query\AST\Functions\FunctionNode;
  4. use Doctrine\ORM\Query\AST\SimpleArithmeticExpression;
  5. use Doctrine\ORM\Query\Lexer;
  6. class Rand extends FunctionNode
  7. {
  8. /**
  9. * @var SimpleArithmeticExpression
  10. */
  11. private $expression = null;
  12. public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
  13. {
  14. if ($this->expression) {
  15. return 'RAND(' . $this->expression->dispatch($sqlWalker) . ')';
  16. }
  17. return 'RAND()';
  18. }
  19. public function parse(\Doctrine\ORM\Query\Parser $parser)
  20. {
  21. $lexer = $parser->getLexer();
  22. $parser->match(Lexer::T_IDENTIFIER);
  23. $parser->match(Lexer::T_OPEN_PARENTHESIS);
  24. if (Lexer::T_CLOSE_PARENTHESIS !== $lexer->lookahead['type']) {
  25. $this->expression = $parser->SimpleArithmeticExpression();
  26. }
  27. $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  28. }
  29. }