src/App/Doctrine/DBAL/Query/Mysql/JsonContains.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Doctrine\DBAL\Query\Mysql;
  3. use Doctrine\ORM\Query\AST\Functions\FunctionNode;
  4. use Doctrine\ORM\Query\Lexer;
  5. /**
  6.  * "JSON_CONTAINS" "(" StringPrimary "," StringPrimary {"," StringExpression }* ")"
  7.  */
  8. class JsonContains extends FunctionNode
  9. {
  10.     public $firstJson;
  11.     public $secondJson;
  12.     public $pathExpression null;
  13.     /**
  14.      * @override
  15.      * @inheritdoc
  16.      */
  17.     public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
  18.     {
  19.         // $platform = $sqlWalker->getConnection()->getDatabasePlatform();
  20.         if ($this->pathExpression) {
  21.             return sprintf(
  22.                 ' JSON_CONTAINS(%s, %s, %s)',
  23.                 $this->firstJson->dispatch($sqlWalker),
  24.                 $this->secondJson->dispatch($sqlWalker),
  25.                 $this->pathExpression->dispatch($sqlWalker)
  26.             );
  27.         }
  28.         return sprintf(
  29.             ' JSON_CONTAINS(%s, %s)',
  30.             $this->firstJson->dispatch($sqlWalker),
  31.             $this->secondJson->dispatch($sqlWalker)
  32.         );
  33.     }
  34.     /**
  35.      * @override
  36.      * @inheritdoc
  37.      */
  38.     public function parse(\Doctrine\ORM\Query\Parser $parser)
  39.     {
  40.         $parser->match(Lexer::T_IDENTIFIER);
  41.         $parser->match(Lexer::T_OPEN_PARENTHESIS);
  42.         $this->firstJson $parser->StringPrimary();
  43.         $parser->match(Lexer::T_COMMA);
  44.         $this->secondJson $parser->StringPrimary();
  45.         if ($parser->getLexer()->isNextToken(Lexer::T_COMMA)) {
  46.             $parser->match(Lexer::T_COMMA);
  47.             $this->pathExpression $parser->StringExpression();
  48.         }
  49.         $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  50.     }
  51. }