vendor/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Doctrine\ORM\Query\AST\Functions;
  4. use Doctrine\ORM\Query\AST\Node;
  5. use Doctrine\ORM\Query\Lexer;
  6. use Doctrine\ORM\Query\Parser;
  7. use Doctrine\ORM\Query\SqlWalker;
  8. /**
  9.  * "CONCAT" "(" StringPrimary "," StringPrimary {"," StringPrimary }* ")"
  10.  *
  11.  * @link    www.doctrine-project.org
  12.  */
  13. class ConcatFunction extends FunctionNode
  14. {
  15.     /** @var Node */
  16.     public $firstStringPrimary;
  17.     /** @var Node */
  18.     public $secondStringPrimary;
  19.     /** @psalm-var list<Node> */
  20.     public $concatExpressions = [];
  21.     /** @inheritdoc */
  22.     public function getSql(SqlWalker $sqlWalker)
  23.     {
  24.         $platform $sqlWalker->getConnection()->getDatabasePlatform();
  25.         $args = [];
  26.         foreach ($this->concatExpressions as $expression) {
  27.             $args[] = $sqlWalker->walkStringPrimary($expression);
  28.         }
  29.         return $platform->getConcatExpression(...$args);
  30.     }
  31.     /** @inheritdoc */
  32.     public function parse(Parser $parser)
  33.     {
  34.         $parser->match(Lexer::T_IDENTIFIER);
  35.         $parser->match(Lexer::T_OPEN_PARENTHESIS);
  36.         $this->firstStringPrimary  $parser->StringPrimary();
  37.         $this->concatExpressions[] = $this->firstStringPrimary;
  38.         $parser->match(Lexer::T_COMMA);
  39.         $this->secondStringPrimary $parser->StringPrimary();
  40.         $this->concatExpressions[] = $this->secondStringPrimary;
  41.         while ($parser->getLexer()->isNextToken(Lexer::T_COMMA)) {
  42.             $parser->match(Lexer::T_COMMA);
  43.             $this->concatExpressions[] = $parser->StringPrimary();
  44.         }
  45.         $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  46.     }
  47. }